无法在optionmenu tkinter

时间:2017-06-27 13:49:02

标签: python tkinter optionmenu

简而言之,每当我尝试使用时:

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

我的问题是,为什么这不起作用?另外,我怎样才能做到这一点?

正如您所看到的,功能之外的功能正常,但内部的功能并不适用。我计划使用这样一个更大的软件,所以非常感谢帮助!

1 个答案:

答案 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