我在很大程度上使用 tkinter GUI 工具創建了該程式,但在單擊 或 - 的實際位置,我看不出哪里出錯了。它應該將輸入到輸入欄位的值添加到結果標簽中,但它拋出了一個 TypeError 說只能將 str (而不是“StringVar”)連接到 str。
import tkinter
class Calculator_GUI:
def __init__(self):
self.mw = tkinter.Tk()
self.mw.title("Calculator")
self.top_frame = tkinter.Frame(self.mw)
self.mid_frame = tkinter.Frame(self.mw)
self.bottom_frame = tkinter.Frame(self.mw)
self.prompt_label = tkinter.Label(self.top_frame, text = "Total: ")
self.num_entry = tkinter.Entry(self.mid_frame, width = 15)
self.add_button = tkinter.Button(self.bottom_frame, text = " ", width = 10, command = self.add)
self.minus_button = tkinter.Button(self.bottom_frame, text = "-", width = 10, command = self.subtract)
self.reset_button = tkinter.Button(self.bottom_frame, text = "Reset", width = 10, command = self.reset)
self.result = tkinter.StringVar()
self.result_label = tkinter.Label(self.top_frame, textvariable = self.result)
self.prompt_label.pack(side = "left")
self.num_entry.pack(side = "left")
self.add_button.pack(side = "left")
self.minus_button.pack(side = "left")
self.reset_button.pack(side = "left")
self.result_label.pack(side = "left")
self.top_frame.pack()
self.mid_frame.pack()
self.bottom_frame.pack()
tkinter.mainloop()
def add(self):
self.result = float(self.num_entry.get() self.result)
def subtract(self):
self.result = float(self.result - self.num_entry.get())
def reset(self):
self.result.set(0)
calc = Calculator_GUI()
uj5u.com熱心網友回復:
由于self.result是 a StringVar,您需要使用self.result.set(...)來更新其值。
.get()在進行加減運算之前,您還需要將回傳的字串轉換為數字。
class Calculator_GUI:
def __init__(self):
...
self.num_entry = tkinter.Entry(self.mid_frame, width = 15)
self.num_entry.insert(0, '0') # initialize to zero
...
def add(self):
try:
self.result.set(float(self.num_entry.get()) float(self.result.get()))
except ValueError as e:
print(e)
def subtract(self):
try:
self.result.set(float(self.result.get()) - float(self.num_entry.get()))
except ValueError as e:
print(e)
...
uj5u.com熱心網友回復:
self.result是 StringVar 型別并且 StringVar.get() 回傳型別 str,因此這個錯誤是有道理的。此外,由于同樣的事實,您需要使用 setter 方法set()來設定結果標簽。
我很快就嘗試了它,到目前為止它有一個問題:它連接字串而不是添加它們的決議值。您需要在添加之前決議 str 。
uj5u.com熱心網友回復:
您需要正確設定和轉換
import tkinter
class Calculator_GUI:
def __init__(self):
self.mw = tkinter.Tk()
self.mw.title("Calculator")
self.top_frame = tkinter.Frame(self.mw)
self.mid_frame = tkinter.Frame(self.mw)
self.bottom_frame = tkinter.Frame(self.mw)
self.prompt_label = tkinter.Label(self.top_frame, text = "Total: ")
self.num_entry = tkinter.Entry(self.mid_frame, width = 15)
self.add_button = tkinter.Button(self.bottom_frame, text = " ", width = 10, command = self.add)
self.minus_button = tkinter.Button(self.bottom_frame, text = "-", width = 10, command = self.subtract)
self.reset_button = tkinter.Button(self.bottom_frame, text = "Reset", width = 10, command = self.reset)
self.result = tkinter.StringVar()
self.result.set('0')
self.result_label = tkinter.Label(self.top_frame, textvariable = self.result)
self.prompt_label.pack(side = "left")
self.num_entry.pack(side = "left")
self.add_button.pack(side = "left")
self.minus_button.pack(side = "left")
self.reset_button.pack(side = "left")
self.result_label.pack(side = "left")
self.top_frame.pack()
self.mid_frame.pack()
self.bottom_frame.pack()
tkinter.mainloop()
def add(self):
self.result.set (str(float(self.num_entry.get()) float(self.result.get())))
def subtract(self):
self.result.set (str(float(self.result.get()) - float(self.num_entry.get())))
def reset(self):
self.result.set('0')
calc = Calculator_GUI()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330425.html
