2012-12-14 48 views
0

我坐在一個我無法弄清自己的情況。tkinter輸入小工具和變量

當即時通訊使用Entry小部件獲取用戶交互時,我很難找到正確的方式來驗證數據。

的情況:

我有兩個入口小部件,用戶必須輸入其必須是浮動的兩個變量。

雖然我可以運行一個程序,只有正常工作,如果輸入的值是浮動的,如果我再留空白或輸入一個字母關閉 - 爲此我要驗證的進入是一個浮動:

variableentry = Entry(root and so on) 
variableentry.grid() 

我使用的是:

variablename = float(variableentry.get()) 

當我:

print(type(variablename) 

我得到個Ë消息:

<class 'float'> 

因此我不能因爲VARIABLENAME是一流的「浮動」的使用

#... 
try: 
    if(variablename is not float): 
    messagebox.showerror("Error", "Incorrect parameter") 
    return 

這顯然心不是工作,而不是浮動,我試圖進入,而不是不同的方式漂浮在if語句中 - 沒有任何運氣。

任何想法?

在前進,謝謝!

最好的問候,

卡斯帕

編輯:

我已經找到了:

from Tkinter import * 

class ValidatingEntry(Entry): 
    # base class for validating entry widgets 

    def __init__(self, master, value="", **kw): 
     apply(Entry.__init__, (self, master), kw) 
     self.__value = value 
     self.__variable = StringVar() 
     self.__variable.set(value) 
     self.__variable.trace("w", self.__callback) 
     self.config(textvariable=self.__variable) 

    def __callback(self, *dummy): 
     value = self.__variable.get() 
     newvalue = self.validate(value) 
     if newvalue is None: 
      self.__variable.set(self.__value) 
     elif newvalue != value: 
      self.__value = newvalue 
      self.__variable.set(self.newvalue) 
     else: 
      self.__value = value 

    def validate(self, value): 
     # override: return value, new value, or None if invalid 
     return value 

http://effbot.org/zone/tkinter-entry-validate.htm

然而,代碼的其餘部分不是寫在類(我知道這不是最佳的,但它是老師要求)是否會影響上述例子?而我將如何讓它適合我的需求?

回答

2

您想要做的是嘗試將輸入框的內容轉換爲浮點數,並在轉換不可能時報告錯誤消息。做variablename = float(variableentry.get())是好的,但要捕獲由float引發的錯誤,如果它給出的字符串無法轉換,則必須將該行包裝在try塊中,並捕獲由float引發的ValueError。如果沒有例外,您可以繼續使用代碼:

try: 
    variablename = float(variableentry.get()) 
except ValueError: 
    # error messagebox, etc 
else: 
    # do stuff with variablename 
+0

這工作完美無缺 - Upvoted和接受 - 非常感謝! :-) – Evilunclebill