0

私が数を試してみると、それは私に与えますが、それが負であるかどうかinvalidだけを言いたいのです:invalid

from Tkinter import *
import tkMessageBox

class MyApp(object):
def __init__(self):
    self.root = Tk()
    self.root.wm_title("Question 7")
    self.label = Label(self.root, text="Enter weight in pounds",
                       font=('Calibri', 50))
    self.label.pack(padx=20,pady=10)
    self.labeltext = StringVar()
    self.labeltext.set("")
    Label(self.root, textvariable=self.labeltext).pack()
    self.entrytext = StringVar()
    Entry(self.root, textvariable=self.entrytext).pack()
    self.entrytext.trace('w', self.entry_changed)

    self.root.mainloop()



def entry_changed(self, a, b, c):
    s = self.entrytext.get()
    try:
        a=int(s)*4.3
        self.labeltext.set(a)
    except:
        if s=="":
           self.labeltext.set("")
    else:
        self.labeltext.set("invalid")


MyApp()
4

1 に答える 1

2

編集: @BillTheLizardが指摘したように、elseステートメントを適切にインデントするのを忘れた可能性がはるかに高くなります。したがって、基本的に以下のすべてを無視し、else:との前に4つのスペースを追加しますself.labeltext.set("invalid"):)

あなたの問題はの使用法にありtry/exceptます。ブロックのelse一部として使用する場合、句で例外が発生しない限り、ピースが実行されます。したがって、あなたの場合、ブロックが正常に完了して実行されるたびに、ブロックは句に移動し、同じテキストを上書きします。try/exceptelsetrytryself.labeltext.set(a)else

あなたが達成しようとしていると思うことを達成するために、次のようなことを試してください。

def entry_changed(self, a, b, c):
    s = self.entrytext.get()

    try:
        a = int(s)
        if a > 0:
            a *= 4.3 # -> a = a * 4.3
            self.labeltext.set(a)
    except ValueError: # Always specify what kind of exception you are catching
        if s == "":
            self.labeltext.set("")
        else:
            self.labeltext.set("invalid")

を削除したのelseは、数値ではないもの、または0未満のものを返すように聞こえたためですinvalid。以前exceptは空の文字列を別の方法で処理したため、必要に応じて調整できます。

于 2012-10-29T03:13:34.717 に答える