当我尝试一个号码时,它会给我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()
答案 0 :(得分:2)
编辑:正如@BillTheLizard指出的那样,您更有可能忘记正确地缩进else
语句。因此,基本上忽略下面的所有内容,并在else:
和self.labeltext.set("invalid")
前面添加四个空格:)
您的问题与try/except
的使用有关。当您使用else
作为try/except
块的一部分时,如果else
子句未引发异常,则try
部分将执行。因此,在您的情况下,只要try
块成功完成并执行self.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
处理空字符串的方式不同,因此可以根据需要对其进行调整。