2015-08-21 88 views
0

我對窗口中的所有條目窗口小部件有類似的界限。如果全部都有條目,則繪製一個按鈕,如果任何一個爲空,則該按鈕不被繪製或移除。我希望用戶輸入一個特定的號碼,而不是接受默認值。檢查條目窗口小部件

any_entry = ttk.Entry(...) 
any_entry.bind('<Key>', is_empty) 

這是處理程序:

def is_empty(event): 
    for child in window.winfo_children(): 
     if child.winfo_class() == 'TEntry': 
      if child.get() == '': 
       calc_btn.grid_remove() 
       return 
    calc_btn.grid() 

我遇到的問題是,該處理器被調用任何按鍵,但存儲在widget textvariable值不直到下一次按鍵更新或小部件失去焦點。如果我在每個Entry小部件中放入一個數字,則會顯示calc_button。如果我專注於任何條目並刪除條目,則在另一個鍵按下或移動焦點之前,該按鈕不會被刪除。這允許用戶單擊calc_button,暴露出道路上可能出現的異常或錯誤,因爲一個Entry可能會產生空值。有關如何更好地處理此問題的任何建議?

回答

1

這是使用類編程,希望你知道它是如何工作的。如果不是,我建議學習它。

from tkinter import * 



class App(Tk): 
    def __init__(self): 
     Tk.__init__(self) 
     self.entry1 = Entry(self) 
     self.entry1.pack() 
     self.entry2 = Entry(self) 
     self.entry2.pack() 
     self.entry1.bind("<KeyRelease>", self.check, add = "+") 
     self.entry2.bind("<KeyRelease>", self.check, add = "+") 
     self.button = Button() 
    def check(self, event): 
     if not self.entry1.get() == "" and not self.entry2.get() == "": 
      self.button.pack()  
     else: 
      self.button.pack_forget() 
root = App() 
root.mainloop() 

我綁定「< KeyRelease>」,而不是「<按鍵響應>」,因爲當這兩個項目都只有一個字,它只有在接下來的KeyPress事件檢查,因爲它似乎手動首先結合火,然後默認(這很可能是一個類綁定)。我在這裏讀過一篇關於SO的帖子,奧克利先生(高技能的tkinter人)解釋了綁定的解除順序。而且條目最有可能KeyPress綁定到他們,邏輯上你先按,稍後發佈:)

+0

完美!我不明白,也無法找到第三個參數(add ='+')的任何信息。你能解釋一下還是指導我解釋一個資料來源?附:我的示例沒有反映,但我正在使用類結構。 –

+0

添加綁定到此小部件的事件。通常,新綁定會替換相同事件序列的任何現有綁定。通過傳入「+」作爲第三個參數,新的回調被添加到現有的綁定中。來源:http://effbot.org/tkinterbook/widget.htm我在那裏添加它,以確保我不與現有的默認綁定插件。 –

相關問題