0

私は自分自身を理解できない状況に座っています。

エントリウィジェットを使用してユーザーの操作を取得するとき、データを検証する正しい方法を見つけるのに苦労しています。

状況:

2つのエントリウィジェットがあり、ユーザーは2つの変数を入力する必要があります。これらの変数はfloatである必要があります。

入力した値がfloatの場合にのみ正しく機能するプログラムを実行できますが、空白のままにするか、文字を入力するとシャットダウンします。そのため、エントリがfloatであることを検証します。

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ステートメントでfloatの代わりにさまざまな入力方法を試しましたが、運がありませんでした。

何か案は?

よろしくお願いします!

よろしくお願いします、

キャスパー

編集:

私は見つけました:

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から

ただし、残りのコードはクラスで記述されていません(これは最適ではないことはわかっていますが、教師から要求されています)。これは上記の例に影響しますか?そして、どうすればそれを自分のニーズに合わせることができますか?

4

1 に答える 1

2

やりたいことは、入力ボックスの内容を float に変換してみて、変換できない場合はエラー メッセージを報告することです。実行しても問題ありませんが、指定された文字列を変換できない場合にvariablename = float(variableentry.get())発生するエラーをキャッチするには、その行を try ブロックでラップし、 によって発生する ValueError をキャッチする必要があります。例外がない場合は、コードを続行できます。floatfloat

try:
    variablename = float(variableentry.get())
except ValueError:
    # error messagebox, etc
else:
    # do stuff with variablename
于 2012-12-14T23:24:52.607 に答える