所以我之前问了一个问题,@ TigerhawkT3帮助了我,但是现在我正在实现对涉及2个类的程序建议的内容我遇到了错误。我正在使用的代码如下:
from tkinter import *
class Calc:
def __init__(self,parent):
self.displayentry = StringVar()
self.display=Entry(parent, textvariable=self.displayentry)
self.display.pack()
parent.bind('<Return>', CalculatorLogic.equal_input)
class CalculatorLogic:
def equal_input(self, event):
self.display.icursor(END)
root = Tk()
RunGUI=Calc(root)
root.mainloop()
我对上面代码的错误告诉我,“当我按下回车键时,TypeError:equal_input()只需要2个参数(给定1个)。
非常感谢您的时间和帮助。
答案 0 :(得分:0)
您无法拨打CalculatorLogic.equal_input
。该方法是一个实例方法,因此必须在实例上调用。
您执行此操作的方式是为Calc
类(或其他内容...)创建CalculatorLogic
的实例。此外,由于equal_input
取决于Calc
中创建的窗口小部件,因此您需要告诉该函数使用Calc
的哪个实例。为此,请传递self
:
class Calc:
def __init__(self, parent):
self.calc = CalculatorLogic(self)
...
parent.bind('<Return>', self.calc.equal_input)
...
class CalculatorLogic:
def __init__(self, calc):
self.calc = calc
def equal_input(self, event):
self.calc.display.icursor(END)
注意:这不是唯一的方法。这个概念是正确的(CalculatorLogic
需要Calc
的句柄,反之亦然),但实现可能会有所不同。例如,你可以拥有第三个控制器&#34;创建每个实例的类,负责它们之间的通信。