gpt4 book ai didi

python - 从列表更新 OptionMenu

转载 作者:太空狗 更新时间:2023-10-30 00:55:26 24 4
gpt4 key购买 nike

我的 GUI 中有一个由列表填充的 OptionMenu。每次用户运行某个进程时,列表都会更新以反射(reflect)这一点。有没有办法根据列表更新 OptionMenu?我已经根据 this question 尝试了 self.plotWindow.update()但无济于事。但是,关闭并重新打开窗口确实会像您预期的那样刷新 OptionMenu。相关代码:

if self.figNum.get() == 'New Figure...':
if self.figList[-1] == 'New Figure...':
self.figList.append(1)
else:
self.figList.append(self.figList[-1]+1)
self.plotWindow.update() #tk.Tk() window
self.i = self.figList[-1]
else:
self.i = self.figNum.get()

最佳答案

OptionMenu 中的选项未绑定(bind)到创建它们的列表。因此,更改列表不会更改 OptionMenu,您必须自己更新它。

您可以通过获取 OptionMenu 的 menu 并向其添加命令来做到这一点。以下示例显示了如何执行此操作(基于 this answer )。

它表明,即使 self.options 列表附加了使用“将选项添加到列表”按钮的选项,OptionMenu 也不会自动更改。要更新 OptionMenu,您可以为此使用“更新选项菜单”按钮,它调用 self.update_option_menu。此函数从 OptionMenu 中删除所有选项,并为 self.options 中的每个项目插入一个新选项。

import Tkinter as tk

class App():
def __init__(self, parent):
self.parent = parent
self.options = ['one', 'two', 'three']

self.om_variable = tk.StringVar(self.parent)
self.om_variable.set(self.options[0])
self.om_variable.trace('w', self.option_select)

self.om = tk.OptionMenu(self.parent, self.om_variable, *self.options)
self.om.grid(column=0, row=0)

self.label = tk.Label(self.parent, text='Enter new option')
self.entry = tk.Entry(self.parent)
self.button = tk.Button(self.parent, text='Add option to list', command=self.add_option)

self.label.grid(column=1, row=0)
self.entry.grid(column=1, row=1)
self.button.grid(column=1, row=2)

self.update_button = tk.Button(self.parent, text='Update option menu', command=self.update_option_menu)
self.update_button.grid(column=0, row=2)

def update_option_menu(self):
menu = self.om["menu"]
menu.delete(0, "end")
for string in self.options:
menu.add_command(label=string,
command=lambda value=string: self.om_variable.set(value))

def add_option(self):
self.options.append(self.entry.get())
self.entry.delete(0, 'end')
print self.options

def option_select(self, *args):
print self.om_variable.get()


root = tk.Tk()
App(root)
root.mainloop()

关于python - 从列表更新 OptionMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com