【发布时间】:2021-10-09 21:46:25
【问题描述】:
import tkinter as tk
class Calculator(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master.geometry("300x800")
self.master.title("GUI Calculator")
self.pack()
# CREATE BUTTONS IN A FOR LOOP.
btnclrs = ["Blue", "Red", "Green", "Red", "Green", "Blue", "Red", "Green",
"Blue"]
self.btns = []
for i in range(9):
def callback(self=self, var=i+1):
self.text.insert(tk.END, var)
self.text.pack()
button = tk.Button(text=i+1, fg=btnclrs[i], bg="Black", command=callback)
button.pack()
self.btns.append(button)
self.text = tk.Text(self.master)
self.text.bind("<Key-Return>", self.calculation) # DON'T CALL FUNCTION WHEN BINDING.
self.text.pack()
self.text.focus_set() # ADDED SO BOUND EVENT-HANDLERS WILL BE CALLED.
operations = ["+", "-", "*", "/"]
self.ops = []
for i in range(4):
def callback1(self=self, var=operations[i]):
self.text.insert(tk.END, var)
self.text.pack()
buttono = tk.Button(text=operations[i], fg="Black", bg="Black", command=callback1)
buttono.pack()
self.ops.append(buttono)
self.output = tk.Text(self.master)
self.output.insert(1.0, "Output: \n")
self.output.pack()
self.master.mainloop()
def calculation(self, event = None):
out = self.text.get('1.0', 'end')
output1 = eval(out)
self.output.delete(1.0, tk.END)
self.output.insert(1.0, output1)
calc_button = tk.Button(text = "Calculate", fg = "Blue", bg = "White", command = calculation)
calc_button.pack()
if __name__ == "__main__":
Calculator()
我已经完成了这个计算器的所有逻辑的编码,我只想创建一个“计算”可视按钮供用户按下。它导致以下错误:
Tkinter 回调异常 回溯(最近一次通话最后): call 中的文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/init.py”,第 1883 行 返回 self.func(*args) TypeError:calculation() 缺少 1 个必需的位置参数:'self'
为什么会这样?
【问题讨论】:
-
从
calculation中删除“self”参数。 -
您的代码运行失败。修复代码的缩进问题。