在 Python 中使用 tkinter 创建一个小型 add/subtract 计算器?
Creating a small add/subtract calculator with tkinter in Python?
我大部分时间都是使用 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()
self.result
是 StringVar 类型,StringVar.get() returns 是 str 类型,因此这个错误是有道理的。此外,由于同样的事实,您需要使用 setter 方法 set()
来设置您的结果标签。
我很快就试过了,到目前为止它只解决了一个问题:它连接字符串而不是添加它们的解析值。您需要在添加它们之前解析 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.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()
由于 self.result
是 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)
...
我大部分时间都是使用 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()
self.result
是 StringVar 类型,StringVar.get() returns 是 str 类型,因此这个错误是有道理的。此外,由于同样的事实,您需要使用 setter 方法 set()
来设置您的结果标签。
我很快就试过了,到目前为止它只解决了一个问题:它连接字符串而不是添加它们的解析值。您需要在添加它们之前解析 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.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()
由于 self.result
是 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)
...