[英]tkinter Entry widget and variables
我坐在一個我無法弄清楚自己的情況。
當我使用Entry小部件來獲得用戶交互時,我很難找到驗證數據的正確方法。
情況:
我有兩個Entry小部件,用戶必須輸入兩個必須是浮點數的變量。
雖然我可以運行一個程序,只有輸入的值是浮點數才能正常工作,如果我然后將其留空或輸入一個字母關閉 - 因此我想驗證該條目是一個浮點數:
variableentry = Entry(root and so on)
variableentry.grid()
我用的是:
variablename = float(variableentry.get())
當我:
print(type(variablename)
我得到的消息:
<class 'float'>
因此我無法使用
#...
try:
if(variablename is not float):
messagebox.showerror("Error", "Incorrect parameter")
return
這顯然不起作用,因為變量名是'float'類而不是float,我嘗試了不同的方式在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
然而,其余的代碼不是在類中編寫的(我知道這不是最優的但是教師要求)會影響上面的例子嗎? 我將如何使其符合我的需求?
您要做的是嘗試將輸入框的內容轉換為浮動,並在無法進行轉換時報告錯誤消息。 執行variablename = float(variableentry.get())
很好,但要捕獲float
引發的錯誤,如果給定的字符串無法轉換,則必須將該行包裝在try塊中,並捕獲由float
引發的ValueError。 如果沒有異常,您可以繼續執行以下代碼:
try:
variablename = float(variableentry.get())
except ValueError:
# error messagebox, etc
else:
# do stuff with variablename
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.