2017-06-27 8 views
-1

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

を私の質問は、なぜこの仕事をしていますか?また、どうやってこの仕事をすることができますか?

ご覧のとおり、機能外のものは正常に動作しますが、内部のものは正常に動作しません。私はこれのようなものを使用する計画がはるかに大きなソフトウェアであるので、大いに助けになるでしょう!

+0

何が変わったのですか " - >オブジェクト" – user1767754

+0

Pycharmが私にそれを加えることを提案しました。しかし、コードはそれがなくてもうまく動作します。私は今、それが必要ないので、それを取り除いた。 @ user1767754 –

答えて

1

Tkという2つのインスタンスを使用することはできません。mainloopを2回呼び出すことはできません。 2番目のウィンドウが必要な場合は、Toplevelのインスタンスを使用する必要があります。プログラムがその2番目のウィンドウが破棄されるのを待つ必要がある場合は、wait_windowメソッドを使用できます。例えば

:effbotサイト上Dialog Windowsを参照して、一時的なダイアログの作成の詳細については

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

+0

これを行う方法を教えてください。またはそれを説明する記事へのリンクを私に与えますか? –

関連する問題