2017-10-19 371 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您可以使用trace方法將「observer」回調附加到該變量。回調在內容改變時被調用。

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

好的。什麼是「w」代表什麼?我仍然對python很陌生,所以很多東西都遇到了麻煩。 – West

+0

@West:代表'寫'。我已經更新了我的答案,以包含來自文檔的簡短說明。 – mentalita

+0

謝謝。有沒有辦法讓選定的值被放入一個變量中,以便我可以在任何地方使用它? – West

0

而是跟蹤變量,你可以使用OptionMenucommand選項。每次點擊菜單項時,都會調用該命令。這個命令有一個參數:被選中的項目。

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的回答那樣追蹤變量。