簡體   English   中英

tkinter Entry小部件和變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM