2017-10-19 107 views
0

オプションメニューで選択した値を印刷しようとしていますが、選択内容をbまたはcに変更しても、コードを実行するたびに最初の値しか印刷されません。 wrong.Thisは私のコードです私はわからない:すべてのPythonのTkinter OptionMenuから値を取得する

from tkinter import * 
window=Tk() 
window.geometry("700x400") 

options=StringVar(window) 
options.set("a") 
menu=OptionMenu(window,options, "a","b","c") 
menu.grid(row=2,column=2) 
selection=options.get() 
print(selection) 

答えて

0

まず、あなたはTkののmainloopあなたのコードの最後に起動する必要があります。また、クラス変数optionsをトレースしてみてください。

docsより:トレースメソッドを使用して、オブザーバコールバックを変数に添付することができます。コールバックは、コンテンツが変更されるたびに呼び出されます。

import tkinter as tk 

root = tk.Tk() 
options = tk.StringVar() 
options.trace_add('write', lambda *args: print(options.get())) 
menu = tk.OptionMenu(root, options, 'a', 'b', 'c') 
menu.pack() 
options.set('a') 
root.mainloop() 
+0

大丈夫です。 Whats "w"の略?私はまだPythonに新しいので、多くのものに問題を起こしています。 – West

+0

@West: '書き込み'の略です。私は私の答えを更新して、ドキュメントの簡単な説明を追加しました。 – mentalita

+0

ありがとうございます。値を選択して変数に入れる方法はありますか?どこでも使えますか? – West

0

代わりの変数をトレースし、あなたはOptionMenucommandオプションを使用することができます。メニュー項目をクリックするたびに、コマンドが呼び出されます。このコマンドは1つの引数、すなわち選択された項目をとります。

import tkinter as tk 

def callback(selection): 
    print(selection) 

root = tk.Tk() 
options = tk.StringVar() 
menu = tk.OptionMenu(root, options, 'a', 'b', 'c', command=callback) 
menu.pack() 
options.set('a') 
root.mainloop() 

この場合、ユーザーがクリックしていないため、最初に選択された項目は印刷されません。コールバックを起動するのにoptions.set('a')が必要な場合は、mentalitaの回答のように変数をトレースする必要があります。

関連する問題