0

私は、16 進値 4 文字の ttk エントリ ボックスを検証する方法を考えてきました。

私は解決策にたどり着きましたが、それを行うためのより正しい/パイソン主義者の方法があるかどうかはわかりません。

これはエントリー宣言です:

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('0') が int('0', 16) として false であるため機能しないことです。

では、もう一度。それはそれを行う方法ですか?そうするためのより良い、またはより「pythonic」な方法はありますか?

4

1 に答える 1