Python - 使用活页夹键在tinter中移动条目光标

时间:2015-05-28 08:40:11

标签: python tkinter

所以我之前问了一个问题,@ 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个)。

非常感谢您的时间和帮助。

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;创建每个实例的类,负责它们之间的通信。

相关问题