問題及錯誤狀態是空字符串''
無法轉換爲整數。
實際上,很多字符串不能轉換爲整數。 在你的情況下,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()創建小部件後一毫秒。用戶沒有時間輸入任何數據。 –