我在Tkinter上遇到一些问题,我想在按下按钮时检索选项菜单中的所选项目,但是当使用小的testfuntion'getdataset'测试功能时,我只能得到预定义的datavariable('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
I w
从OptionMenu中选择选项时,您应该得到一个错误。
特定:
TypeError: getdataset() takes 0 positional arguments but 1 was given
为了解决这个问题,我们可以添加一个参数来处理这个问题。更新您的函数,使其看起来像这样:
def getdataset(_=None):
原因是由于您的2个不同的commands
如何与此功能交互。在没有Button命令的情况下调用OptionMenu命令时,该函数会将参数发送给函数。起初这并不明显,但是如果您编写类似的内容:
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()