0
這裏是簡單的Python/Tkinter程序與單個Entry小部件,我想自動檢查是否輸入號碼。Python/Tkinter - 奇怪的插入,而不是替換在進入驗證
from Tkinter import *
class MyClass:
def __init__(self, parent):
self.myParent = parent
self.portVar = IntVar()
self.portVar.set(111)
port_validator = self.myParent.register(self._validate)
self.myEntry = Entry(self.myParent, width=9, textvariable=self.portVar,
validate='all', validatecommand=(port_validator,'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'))
self.myEntry.pack(side=TOP)
def _validate(self, d, i, P, s, S, v, V, W):
print "OnValidate: d='%s' i='%s' P='%s' s='%s' S='%s' v='%s' V='%s' W='%s'" % (d, i, P, s, S, v, V, W)
return P.isdigit()
root = Tk()
myclass = MyClass(root)
root.mainloop()
僅在_validate()函數中打印語句用於調試。 問題是在這種情況下Entry的可視化編輯是不正確的。 例如,我正在執行這些步驟:
- 啓動程序。
- 見「111」在鍵盤上輸入
- 選擇「111」通過鼠標左鍵
- 按「9」,而不是完整
- 替換「111」到「9」的插入值恰好,我看到'9111'!
調試日誌(ⅰnumerated爲舒適步驟):
- 的OnValidate:d = ' - 1' I = ' - 1' P = '111' S = '' S = '' V = '所有' V = '被迫' W =
- 的OnValidate:d = ' - 1' I = ' - 1' P = '111' S = '111' S = '' V = '全部' 37125736' 。 'V =' 的focusIn' W = '37125736'
- 的OnValidate:d = '0' I = '0' P = '' S = '111' S = '111' V = '全部' V =' 鍵'W ='。37125736'
- OnValidate:d ='1'i ='0'P ='9111' s ='111'S ='9'v = '所有' V = '鍵' W =」 37125736' 。
- 的OnValidate:d = '0' I = '1' P = '9' S = '9111' S = '111' V = '全部' v = '鑰匙' W =
- 的OnValidate '37125736' :d = '1' I = '1' P = '99' S = '9' S = '9' v = '所有' v =' 鍵'W =' 37125736'
- 的OnValidate:d = '1' I = '2' P = '999' S = '99' S = '9' v = '所有' v = '鍵' W =」 0.37125736'
注重步驟4。它是不需要輸入的文本狀態陌生的附加步驟(‘9111’)
但如果我改變
return P.isdigit()
到
return True
一切都變得美好!條目像其他程序中的任何條目一樣工作。
1. OnValidate: d='-1' i='-1' P='111' s='' S='' v='all' V='forced' W='.37650024'
2. OnValidate: d='-1' i='-1' P='111' s='111' S='' v='all' V='focusin' W='.37650024'
3. OnValidate: d='0' i='0' P='' s='111' S='111' v='all' V='key' W='.37650024'
4. OnValidate: d='1' i='0' P='9' s='' S='9' v='all' V='key' W='.37650024'
5. OnValidate: d='1' i='1' P='99' s='9' S='9' v='all' V='key' W='.37650024'
6. OnValidate: d='1' i='2' P='999' s='99' S='9' v='all' V='key' W='.37650024'
爲什麼,夥計們?