首页 > 解决方案 > Tkinter Option Menu Variable.get() 方法不返回所选元素

问题描述

我对 Tkinter 有一些问题,我想在按下按钮时检索选项菜单的选定项,但是在使用小测试函数“getdataset”测试功能时,我只得到预定义的数据变量(“Birthdata”)作为输出所以似乎 datavariable.get() 方法没有返回选项菜单中的选定选项。我到处寻找,但似乎找不到答案。任何帮助表示赞赏。

带有选项菜单的代码

root = Tk()
root.configure(background='white')
def getdataset():
    print(datavariable.get())

datavariable = StringVar(root)
datavariable.set('Birthdata')
PickData = OptionMenu(root, datavariable,'Birthdata', 'Marriagedata', 'Deathdata',command=getdataset)
PickData.grid(column=1,columnspan=2,row=1)

通过单击按钮初始化测试功能的代码:

wordcloud = Button(root, text = 'Word Cloud', bg='white', width=20, height = 5, command=getdataset)

单击多个按钮后的输出:

Birthdata
Birthdata
Birthdata

标签: pythonpython-3.xtkinteroptionmenutkinter.optionmenu

解决方案


从 OptionMenu 中选择选项时,您应该会收到错误消息。

具体来说:

TypeError: getdataset() takes 0 positional arguments but 1 was given

为了解决这个问题,我们可以添加一个参数来处理这个问题。将您的函数更新为如下所示:

def getdataset(_=None):

原因是您的 2 个不同的人如何commands与此功能进行交互。OptionMenu 命令在没有 Button 命令的情况下被调用时向函数发送参数。起初这并不明显,但如果您编写如下内容:

def getdataset(arg=None):
    print(arg)

您会看到,当您按下按钮时,它将打印None,当您从菜单中选择某些内容时,它将打印选择的值。

您的代码应如下所示:

import tkinter as tk


def getdataset(_=None):
    print(datavariable.get())


root = tk.Tk()
root.configure(background='white')
datavariable = tk.StringVar(root)
datavariable.set('Birthdata')
tk.OptionMenu(root, datavariable, 'Birthdata', 'Marriagedata', 'Deathdata', command=getdataset).grid()
tk.Button(root, text='Word Cloud', bg='white', width=20, height=5, command=getdataset).grid()
root.mainloop()

推荐阅读