问题及错误状态是空字符串''
无法转换为整数。
实际上,很多字符串不能转换为整数。 在你的情况下,int(e.get())
产生一个错误,因为该项是空的,但int('')
产生了一个错误。 因此,您需要在转换它之前验证输入,以便仅在包含整数的字符串表示形式时才对其进行处理。
def get_value(entryWidget):
value = entryWidget.get()
try:
return int(value)
except ValueError:
return None
然后,而不是设置lambda: print(e.get())
作为回调到您的按钮,通过lambda: print(get_value(e))
:在get_value
功能except
-
你可以用一个try
。 如果该值可能被解析为一个整数,这将打印int(e.get())
的结果。 如果不能,这将打印None
。
这里是你的代码的修改后的版本:
import tkinter
root= tkinter.Tk()
def get_value(entryWidget):
value = entryWidget.get()
try:
return int(value)
except ValueError:
return None
e = tkinter.Entry(root)
e.pack()
b = tkinter.Button(root, command=lambda: print(e.get()))
b.pack()
conversion = get_value(e)
if conversion is not None:
conversion *= 1.8 + 32
l = tkinter.Label(root, text=conversion)
top.mainloop()
然而,这是一个有点尴尬。 由于条目的内容在主循环之前被捕获,所以后者将始终为空。
在处理图形用户界面时,您无法像往常一样按顺序思考。 你应该先问一下你的按钮更新标签的内容按下时,以使其显示转换的结果是:
import tkinter
def get_value(entryWidget):
value = entryWidget.get()
try:
return int(value)
except ValueError:
return None
def convert(value):
if value is None:
return None
else:
return 1.8*value + 32
def set_label_text(label, entry):
value = convert(get_value(entry))
if value is None:
label['text'] = "Enter an integer"
else:
label['text'] = value
root = tkinter.Tk()
e = tkinter.Entry(root)
l = tkinter.Label(root, text="")
b = tkinter.Button(root, text="Convert", command=lambda: set_label_text(l, e))
e.pack()
l.pack()
b.pack()
root.mainloop()
要调用' e.get()创建小部件后一毫秒。用户没有时间输入任何数据。 –