[英]a tkinter program error i cant seem to get rid of
我在使用 tkinter 時遇到錯誤,我無法理解我做錯了什么導致了這個錯誤。
這是我的代碼:
from tkinter import *
windows = Tk()
frame = Frame(windows,height = 200 ,width = 700)
heading = Label(frame,text="COST CALCULATOR").grid(row = 0,column = 1,columnspan =7)
frame.pack()
def area(length,breadth):
global area
ftom(length,breadth)
area = length*breadth
return area
t1 = Label(frame,text = "enter the length:").grid(row = 1 ,column = 0)
e1 = Entry(frame)
e1.grid(row =1,column = 1)
ln = e1.get()
e1.delete(0,END)
t2 = Label(frame,text = "enter the breadth:").grid(row = 2 ,column = 0)
e2 = Entry(frame)
e2.grid(row = 2,column = 1)
br = e2.get()
e2.delete(0,END)
t3 = Label(frame,text = "total area covered").grid(row = 3 ,column = 0)
ln = int(ln)
br = int(br)
ar = area(ln,br)
e3 = Label(frame,text =f"{ar}")
e3.grid(row = 3 , column = 1)
windows.mainloop()
這是我得到的錯誤:
Traceback (most recent call last):
File "C:/Users/Allen Alex Abraham/allensworld/allensworld/trial2.py", line 55, in <module>
ln = int(ln)
ValueError: **invalid literal for int() with base 10: ''**
問題是您在創建條目小部件后大約一毫秒調用e1.get()
,遠在用戶有機會輸入數據之前。
GUI 編程與非 GUI 編程不同 - 小部件不會阻塞,直到用戶以輸入方式input
某些內容。 相反,您需要定義一個按鈕或某種其他方式,以便用戶在准備好時執行計算(菜單項、鍵盤綁定等)。
最簡單的解決方案是創建一個按鈕來執行計算。 當您單擊按鈕時,綁定到按鈕的函數可以收集它需要的數據,調用函數來計算結果,然后用結果更新顯示。
例如,首先定義一個函數來獲取數據並計算結果:
def do_calculation():
length = int(e1.get())
breadth = int(e2.get())
result = area(length, breadth)
e3.configure(text=result)
接下來,創建一個按鈕,單擊時將調用此函數:
do_calc_button = Button(frame, command=do_calculation, text="Calculate")
do_calc_button.grid(row=4, column=0)
有了它,用戶可以輸入值,單擊按鈕,然后查看結果。
您的代碼和問題更容易修復。 也就是說,您確實需要添加對問題的描述。 每個人可能都不清楚您的問題僅基於代碼。 它被認為是一個糟糕的問題,很可能會被否決,並且不會像現在這樣獲得幫助。
這就是說我會在這里改變一些事情。
如果導入 *,請不要import tkinter as tk
因為這將有助於防止在路上覆蓋方法。
您的get()
方法在您的代碼啟動時立即執行,因此要解決此問題,您需要將它們移動到一個函數中,然后在將某些內容添加到您的輸入字段后使用按鈕或綁定調用該函數。
get()
始終返回一個字符串,因此在將值轉換為整數或浮點數之前,您的數學不會起作用。 所以像int(e1.get())
這樣的東西可以在這里工作。 也就是說,為了防止在提交數字以外的內容時出現錯誤,您可以使用try/except
語句來處理錯誤。
不要將函數和變量命名為同一事物。 這可能會導致問題,因此始終為您的變量/函數/類等提供唯一的名稱。
看看下面的代碼,如果你有任何問題,請告訴我:
import tkinter as tk
windows = tk.Tk()
frame = tk.Frame(windows, height=200, width=700)
tk.Label(frame, text="COST CALCULATOR").grid(row=0, column=1, columnspan=7)
frame.pack()
tk.Label(frame, text="enter the length:").grid(row=1, column=0)
tk.Label(frame, text="enter the breadth:").grid(row=2, column=0)
tk.Label(frame, text="total area covered").grid(row=3, column=0)
e1 = tk.Entry(frame)
e2 = tk.Entry(frame)
e3 = tk.Label(frame, text=f"")
e1.grid(row=1, column=1)
e2.grid(row=2, column=1)
e3.grid(row=3, column=1)
def area_func():
ln = e1.get()
br = e2.get()
e1.delete(0, "end")
e2.delete(0, "end")
try:
area = int(ln) * int(br)
e3.config(text=f"{area}")
except BaseException as e:
print("Value error. Make sure you have only entered a valid integer.")
print(e)
tk.Button(frame, text="Submit", command=area_func).grid(row=4, column=0, columnspan=2)
windows.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.