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

问题描述 投票:0回答:1

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

python python-3.x tkinter optionmenu tkinter.optionmenu
1个回答
1
投票

从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()
© www.soinside.com 2019 - 2024. All rights reserved.