python - 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
我
解决方案
从 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()
推荐阅读
- scala - 插入前火花洗牌数据
- lua - 整数后的 Lua 点
- python-3.x - ModuleNotFoundError:没有名为“草”的模块 | 地理信息系统 | 蟒蛇3 | CENTOS 7
- windows - 为什么 Windows 操作系统未检测到我的 nuget 环境,nuget:术语“nuget”未被识别为 cmdlet 的名称,
- jsf - 无法通过 bean 中的 id 获取组件
- linux - Linux 安全启动自动注册
- angular - 有没有合适的方法来连接以下可观察的链?
- api - 通过api将批量数据上传到branch.io
- javascript - 根据在选择/下拉框中而不是复选框中选择的值动态获取和显示地图图层
- java - 在Java中,我应该如何命令一个二维点沿着距离矢量线移动到另一个点?