努力使此代碼在我的 GUI 中作業。我犯了很多錯誤,并試圖從句法上理解我如何才能完成這項作業。我正在嘗試制作一個訂單,其中包含客戶想要的 cookie 數量并計算它們的總數。我知道這肯定是我忽略的一些簡單的事情。
from tkinter import Button, Entry, Label,Tk
from tkinter.messagebox import showinfo
class CookieOrderForm(Tk):
def __init__(self,parent=None):
Tk.__init__(self, parent)
self.title("Cookie Form")
self.make_widgets()
def total(self):
order = sum(int(e.get()) for e in (self.chipEn, self.oatEn, self.oreoEn))
txt = ("Your Order Total Is: " str(order))
self.new.config(text = txt)
def make_widgets(self):
chip = Label(self, text='Chocolate Chip ($1.00)').grid(row=1, column=0)
self.chipEn = Entry(self)
self.chipEn.grid(row=1, column=1, columnspan=4)
oat = Label(self, text='Oatmeal ($1.50)').grid(row=2, column=0)
self.oatEn = Entry(self)
self.oatEn.grid(row=2, column=1, columnspan=4)
Button(self,text='Order Total', command=lambda:self.total()).grid(row=4, column=2)
oreo = Label(self, text='Oreo ($2.00)').grid(row=3, column=0)
self.oreoEn = Entry(self)
self.oreoEn.grid(row=3, column=1, columnspan=4)
self.new = Label(self)
self.new.grid(row=3, column=1)
CookieOrderForm().mainloop()
我認為我的主要問題來自這里的這條線
order = sum(int(e.get()) for e in (self.chipEn, self.oatEn, self.oreoEn))
編輯:::: 錯誤資訊包括
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\17734\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1884, in __call__
return self.func(*args)
File "C:\Users\17734\OneDrive\Desktop\fall 2021\csc242\homework\CSC242hw4.py", line 91, in <lambda>
Button(self,text='Order Total', command=lambda:self.total()).grid(row=4, column=2)
File "C:\Users\17734\OneDrive\Desktop\fall 2021\csc242\homework\CSC242hw4.py", line 78, in total
order = sum(int(e.get()) for e in (self.chipEn, self.oatEn, self.oreoEn))
File "C:\Users\17734\OneDrive\Desktop\fall 2021\csc242\homework\CSC242hw4.py", line 78, in <genexpr>
order = sum(int(e.get()) for e in (self.chipEn, self.oatEn, self.oreoEn))
ValueError: invalid literal for int() with base 10: ''
uj5u.com熱心網友回復:
僅Entry當您按下 時有空時,您才會收到此錯誤Button。
嘗試int(""),您會看到相同的錯誤。
當您輸入一些文本(如Hello World)而不是數字時,您可能會遇到類似的錯誤。
你可以把sum()在try/except捕獲錯誤。
def total(self):
try:
order = sum(int(e.get()) for e in (self.chipEn, self.oatEn, self.oreoEn))
txt = ("Your Order Total Is: " str(order))
except Exception as ex:
print('Exception:', ex)
txt = 'Your have wrong values in Order'
self.new.config(text = txt)
最終,您應該將每個值分別轉換為單獨的值,try/catch以查看哪個Entry值錯誤并顯示具有更好資訊的訊息。
uj5u.com熱心網友回復:
這可能不是最好的解決方案,但它有效。添加功能以檢查您的輸入是否為數字,如果不是則回傳,0如果是則回傳int
from tkinter import Button, DoubleVar, Entry, Label, StringVar,Tk
from tkinter.messagebox import showinfo
class CookieOrderForm(Tk):
def __init__(self,parent=None):
Tk.__init__(self, parent)
self.title("Cookie Form")
self.make_widgets()
def entryIsDigit(self, number: str) -> int:
if number.isdigit() == True:
return int(number)
return 0
def total(self):
order = sum(e for e in (self.entryIsDigit(self.chipEn.get()), self.entryIsDigit(self.oatEn.get()), self.entryIsDigit(self.oreoEn.get())))
txt = ("Your Order Total Is: " str(order))
self.new.config(text = txt)
def make_widgets(self):
chip = Label(self, text='Chocolate Chip ($1.00)').grid(row=1, column=0)
self.chipEn = Entry(self)
self.chipEn.grid(row=1, column=1, columnspan=4)
oat = Label(self, text='Oatmeal ($1.50)').grid(row=2, column=0)
self.oatEn = Entry(self)
self.oatEn.grid(row=2, column=1, columnspan=4)
Button(self,text='Order Total', command=lambda:self.total()).grid(row=4, column=2)
oreo = Label(self, text='Oreo ($2.00)').grid(row=3, column=0)
self.oreoEn = Entry(self)
self.oreoEn.grid(row=3, column=1, columnspan=4)
self.new = Label(self)
self.new.grid(row=3, column=1)
CookieOrderForm().mainloop()```
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327501.html
上一篇:如何從tkinterpython中的特定條目之外通過滑鼠左鍵單擊來銷毀小部件
下一篇:重新編譯已更改的表
