我一直在考虑验证ttk条目框,以获得4个字符的十六进制值。
我找到了一个解决方案,但我不确定是否有更正确/蟒蛇的方式来做到这一点。
这是条目声明:
vcdmCheckSum = (self.register(self.OnValidateCheckSum), '%P', '%d')
self.tlCheckSumEntry = Entry(self, validate="key", validatecommand=vcdmCheckSum, width=10)
self.tlCheckSumEntry.grid(row=self.rowOptions2, column=self.columnOptions1, sticky=tk.W+tk.N, padx=5, pady=5)
这是我的OnValidateCheckSum函数:
def OnValidateCheckSum(self, P, d):
# If you are not writting but deleting
if d <> '1':
return True
try:
return (len(P) < 5) and (int(P, 16) <= int('FFFF', 16))
except:
return False
棘手的是,如果我使用int(P,16)而没有检查最大值并开始写0它不会工作因为int(&#39; 0&#39;)假为int(&#39) ; 0&#39;,16)。
所以,再一次。那是这样做的吗?是否有更好或更多的&#34; pythonic&#34;这样做的方法?
答案 0 :(得分:2)
假设字符串中没有特殊字符(如$或0x):
def OnValidateCheckSum(self, P, d):
valid_hex_char = lambda c: c in 'abcdef0123456789'
return (len(P) < 5) and (all(valid_hex_char(z) for z in P.lower()))