Tkinter 选项菜单 Variable.get() 方法不返回所选元素

Tkinter Option Menu Variable.get() method not returning selected element

我在使用 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

当select从您的 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,当您从菜单中选择 select 时,它会打印 selection 的值。

您的代码应如下所示:

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()