简而言之,每当我尝试使用时:
import tkinter
def donothing():
print("Doing nothing")
window = tkinter.Tk()
list = ["x", "y", "z"]
var = tkinter.StringVar()
var.set("This one doesn't.")
option = tkinter.OptionMenu(window, var, *list)
option.grid(row=1, column=1)
window.mainloop()
main = tkinter.Tk()
var2 = tkinter.StringVar()
var2.set("This one works.")
list2 = ["x","y","z"]
button = tkinter.Button(text="test", command=donothing)
menu = tkinter.OptionMenu(main, var2, *list2)
button.grid(row=1, column=1)
menu.grid(row=2, column=1)
main.mainloop()
我的问题是,为什么这不起作用?另外,我怎样才能做到这一点?
正如您所看到的,功能之外的功能正常,但内部的功能并不适用。我计划使用这样一个更大的软件,所以非常感谢帮助!
答案 0 :(得分:1)
您不能拥有Tk
的两个实例,也不应该两次致电mainloop
。如果您需要第二个窗口,则需要使用Toplevel
的实例。如果您需要让程序等待第二个窗口被销毁,您可以使用wait_window方法。
例如:
import tkinter
def donothing():
print("Doing nothing")
window = tkinter.Toplevel()
list = ["x", "y", "z"]
var = tkinter.StringVar()
var.set("This one doesn't.")
option = tkinter.OptionMenu(window, var, *list)
option.grid(row=1, column=1)
print("waiting for the window to go away...")
main.wait_window(window)
print("done!")
main = tkinter.Tk()
var2 = tkinter.StringVar()
var2.set("This one works.")
list2 = ["x","y","z"]
button = tkinter.Button(text="test", command=donothing)
menu = tkinter.OptionMenu(main, var2, *list2)
button.grid(row=1, column=1)
menu.grid(row=2, column=1)
main.mainloop()
有关创建临时对话框的更多信息,请参阅effbot站点上的Dialog Windows。