2017-06-27 8 views
-1

Kurz gesagt, wenn ich zu verwenden versuchen:Kann nicht wählen Option in optionmenu tkinter

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

Meine Frage ist, warum funktioniert das nicht? Wie kann ich das auch machen?

Wie Sie sehen können, funktioniert der eine außerhalb der Funktion gut, aber der eine drinnen nicht. Ich habe Pläne, etwas wie dieses ist eine viel größere Stück Software zu verwenden, so würde Hilfe sehr geschätzt werden!

+0

Was ist das komische "-> Objekt" – user1767754

+0

Pycharm vorgeschlagen, dass ich es hinzufügen. Der Code funktioniert ohne ihn jedoch einwandfrei. Ich habe es jetzt los, da es nicht gebraucht wird. @ user1767754 –

Antwort

1

Sie können nicht zwei Instanzen von Tk haben, und Sie sollten mainloop nicht zweimal aufrufen. Wenn Sie ein zweites Fenster benötigen, müssen Sie eine Instanz von Toplevel verwenden. Wenn Sie für das Programm warten müssen, bis das zweite Fenster zerstört wird, können Sie die Methode wait_window verwenden.

Zum Beispiel:

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

Weitere Informationen über temporäre Dialoge erstellen, finden Sie Dialog Windows auf dem effbot Ort.

+0

Kannst du mir bitte etwas sagen, wie ich das mache? Oder geben Sie mir einen Link zu einem Beitrag, der es erklärt? –

Verwandte Themen