2016-02-12 69 views
0

我想要得到的:複選框狀態的變化會將Entry小部件的狀態從'禁用'更改爲'正常'。 (複選框關閉=輸入禁用,複選框=輸入正常)。 我的問題是,我不知道如何訪問和更新條目的狀態。對象(tkinter,Python3)初學者級別的訪問狀態

我的代碼:

from tkinter import * 
from tkinter import ttk 

class App(Frame): 
    def __init__(self, master): 
     ttk.Frame.__init__(self, master, padding='20') 
     self.grid() 
     self.create_checkbox() 
     self.create_entry() 

    def create_checkbox(self): 
     self.limit = BooleanVar() 
     Checkbutton(self, 
        text='Limit length', 
        variable= self.limit, 
        command= self.state_update, 
        ).grid(row=1, column=1, sticky=W) 

    def create_entry(self): 
     self.entry_low = StringVar() 
     Entry(self, 
       width=6, 
       textvariable=self.entry_low, 
       state='disabled', 
      ).grid(row=1, column=2, sticky=W) 


    def state_update(self): 
     self.entry_low.config(state="normal") #THIS OBVIOUSLY DOES NOT WORK 

root = Tk() 
root.title("Lottery") 
app = App(root) 
root.mainloop() 

我是初學者,所以我會簡單的解決方案,特別感謝。

+0

你會想一個['STRINGVAR()'或'BooleanVar()'](http://effbot.org/tkinterbook/variable.htm)添加到checkbutton再考慮添加跟蹤,到STRINGVAR。一旦設置了跟蹤,您可以使用它來檢測何時更改了檢查按鈕並相應地更新條目的狀態。 – Jkdc

+0

@Jkdc:不需要追蹤。這就是'command'屬性的用途。 –

+0

@Jkdc,謝謝!顯然,有沒有想過它,這工作很適合我。我也將嘗試由Bryan下面給出的解決方案。 – oboer

回答

1

保存對條目窗口小部件的引用,然後調用configure方法。爲了讓事情變得容易,請爲您的檢查按鈕提供各州的值。這不是嚴格必要的,您可以使用布爾值,然後將其轉換爲適當的狀態。

def create_checkbox(self): 
    self.limit = StringVar(value="normal") 
    checkbutton = Checkbutton(..., onvalue="normal", offvalue="disabled", ...) 
    checkbutton.grid(...) 

def create_entry(self): 
    self.entry_low = StringVar() 
    self.entry = Entry(self, 
      width=6, 
      textvariable=self.entry_low, 
      state='disabled', 
     ) 
    self.entry.grid(row=1, column=2, sticky=W) 

def state_update(self): 
    self.entry.config(state="normal") #THIS OBVIOUSLY DOES NOT WORK 

注意:您需要調用grid在第二個步驟。 grid(...)(以及place)返回None。如果你這樣做x=Entry(...).grid(...)x將永遠是None