python - 在 Python 中使用 tkinter 创建一个小型加/减计算器?
问题描述
在大多数情况下,我使用 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
是 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)
...
推荐阅读
- datetime - BigQuery - 从时区名称获取时区偏移量
- r - 在 Shiny 中,加载数据,然后预处理到全局环境,然后显示 UI
- javascript - 如何在 jsonServer 中将自定义路由移到 server.js 之外
- python - ball animation is really junky while running pong game
- c++ - 在自定义哈希表头文件中包含自定义链接列表
- sql - 严格按顺序将两个表连接在一起
- excel - 旋转图片然后设置旋转后的属性
- android - 约束布局下的ListView在预览中消失
- python - 列表和嵌套列表的简单点积以单独列表中的索引为条件
- winapi - 消息和通知有什么区别?