Python 保存选项菜单输入-tkinter

Python 保存选项菜单输入-tkinter,python,tkinter,Python,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.columnconfi

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

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)
这不起作用,打印出来的只是“数字”


任何建议都将不胜感激

我认为你把事情弄得太复杂了。您的tkvar变量都是独立跟踪的,因此您只需要在主循环结束后打印每个tkvar的值

删除了2个函数,只使用了TKVAR

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

虽然我觉得这个print语句不应该起作用,因为我们破坏了tkinter实例,我认为它也应该破坏tkvar,但我想不会。也许有人能帮我解释一下。

change\u下拉列表1
中,
number
是一个局部变量。函数之外的任何东西都看不到它。是的,这就是为什么我添加了“returnnumber”,你不能从绑定函数返回值。运行函数的代码大多忽略返回值。谢谢。但我该如何保存它呢?简单的“number=tkvar1.get()”不会work@zeb92你所说的节约到底是什么意思?你想把它放在一个文件中,还是仅仅是一个可以在Tkinter程序之外调用的变量?没关系,当它在“root.mainloop()”之后时,它就起作用了——这肯定是把它复杂化了。干杯