2011-06-07 75 views
5

一個簡單的問題(對於像我這樣的tkinter newby不是那麼簡單):我正在構建一個GUI,我想要兩個單選按鈕來驅動狀態(啓用或禁用)一個Entry小部件,用戶將輸入數據。當第一個單選按鈕被按下時,我想要禁用條目;當按下第二個單選按鈕時,我希望禁用條目。Python tkinter通過單選按鈕進入控件狀態切換

這裏是我的代碼:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 

#callbacks 
def enableEntry(): 
    entry.configure(state=ENABLED) 
    entry.update() 

def disableEntry(): 
    entry.configure(state=DISABLED) 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

我的想法是當按下每個單選按鈕來調用適當的回調。但我不確定它實際上發生在我寫的代碼中,因爲當我選擇無線電時,Entry的狀態不會被切換。

我在哪裏錯了?

回答

5

你的程序有一些問題,但總體結構是確定的。

  1. 您不打電話root.mainloop()。這對於事件循環來說是必要的,以便服務諸如按鈕點擊等事件。
  2. 您使用ENABLEDDISABLED,但不要在任何地方定義或導入這些事件。我個人更喜歡使用字符串值"normal""disabled"
  3. 你是不是打包你的主要部件frame

當我解決這三樣東西你的代碼工作正常。這裏的工作代碼:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 
frame.pack() 

#callbacks 
def enableEntry(): 
    entry.configure(state="normal") 
    entry.update() 

def disableEntry(): 
    entry.configure(state="disabled") 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

root.mainloop() 
+0

布萊恩,道歉:我忘了插入'root.mainloop()'到我的代碼摘錄(錯別字) – csparpa 2011-06-07 11:58:38

+0

好了,現在該代碼工作正常。謝謝! – csparpa 2011-06-07 11:59:09