繁体   English   中英

保存OptionMenu输入-tkinter

[英]Saving a OptionMenu input - tkinter

我从互联网上改编了一个简单的示例,以创建一个简单的下拉菜单。 我正在尝试用户的输入,以便在他们关闭输入框后就可以使用它。 我的最新尝试如下所示:

from tkinter import *

root = Tk()
root.title("Tk dropdown example")

# Add a grid
mainframe = Frame(root)
mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)
mainframe.pack(pady = 100, padx = 100)

# Create a Tkinter variable
tkvar1 = StringVar(root)
tkvar2 = StringVar(root)

choices_wl = [2,3,4]

popupMenu = OptionMenu(mainframe, tkvar1, *choices_wl)
Label(mainframe, text="Select a number").grid(row = 1, column = 1)
popupMenu.grid(row = 2, column =1)

choices_rw = [5,10,15,20]


popupMenu = OptionMenu(mainframe, tkvar2, *choices_rw)
Label(mainframe, text="Select a width").grid(row = 1, column = 2)
popupMenu.grid(row = 2, column =2)

quit_button = Button(mainframe, text="OK", command=root.destroy).grid(row = 5, column = 2)

# on change dropdown value
def change_dropdown1(*args):
    number=tkvar1.get()
    tkvar1.set(number)
    return number

def change_dropdown2(*args):
    print( tkvar2.get() )

# link function to change dropdown
tkvar1.trace('w', change_dropdown1)
number = change_dropdown1()
tkvar2.trace('w', change_dropdown2)

root.mainloop()

print("number=%s" % number)

这不起作用,并且所有打印的内容都是'number ='

任何意见,将不胜感激

我认为您使事情变得太复杂了。 您的tkvar变量会全部跟踪自己,因此您只需在mainloop结束后打印每个tkvar的值即可。

删除了2个函数,只使用了tkvars。

from tkinter import *

root = Tk()
root.title("Tk dropdown example")

mainframe = Frame(root)
mainframe.grid(column=0, row=0, sticky=(N,W,E,S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
mainframe.pack(pady=100, padx=100)

tkvar1 = StringVar(root)
tkvar2 = StringVar(root)

choices_wl = [2, 3, 4]
choices_rw = [5, 10, 15, 20]

popupMenu = OptionMenu(mainframe, tkvar1, *choices_wl)
Label(mainframe, text="Select a number").grid(row=1, column=1)
popupMenu.grid(row=2, column=1)

popupMenu = OptionMenu(mainframe, tkvar2, *choices_rw)
Label(mainframe, text="Select a width").grid(row=1, column=2)
popupMenu.grid(row=2, column=2)

quit_button = Button(mainframe, text="OK", command=root.destroy).grid(row=5, column=2)

root.mainloop()

# this line works fine on my end.
print("numbers = {}, {}".format(tkvar1.get(), tkvar2.get()))

虽然我觉得这个打印语句不应该工作,因为我们销毁了tkinter实例,并且我认为那也应该销毁了tkvar的实例,但我想不是。 也许有人可以帮我了解一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM