2014-05-18 28 views
0

最近,我發現Entry widget的驗證選項非常有用(請參閱this question)。我最近嘗試編寫驗證命令來驗證用戶是否正在輸入十六進制代碼或已命名的顏色。我寫了這個,它對十六進制代碼很有用,它偶爾用於顏色。它運行在每個按鍵上,等等。 (validate=ALLTkinter條目驗證:檢查有效顏色或部分顏色

def checkColorValid(P): 
    global backgroundColor 
    if not P: 
     return True 

    if P.lower() in colors: 
     backgroundColor = P 
     return True 

    if P[0] == '#': 
     try: 
      if len(P) == 1: 
       return True 
      int(P[1:], 16) 
      if len(P) < 8: 
       backgroundColor = P 
       return True 
      else: 
       return False 
     except ValueError: 
      return False 

    for color in colors: 
     if color.startswith(P.lower()): 
      return True 

colors是所有有效的命名顏色的列表。
驗證碼有效,除非您嘗試鍵入命名的顏色,並重復輸入相同的字符。一旦發生這種情況,驗證似乎只是停止工作。它不再運行,直到你重新啓動程序。

+0

你描述了你的程序正在做什麼,但你實際上沒有提出一個問題。你需要什麼幫助? –

回答

1

驗證碼可能返回None而不是TrueFalse。也許增加一個最終的return語句會有所幫助。

+0

這是問題。當驗證命令返回無,它似乎掛起並停止運行永遠。在方法底部添加一個'返回False'使得它可以在任何情況下工作。 – Balink