在python中使用lambda表达式调用另一个类的方法

最后发布: 2019-12-03 10:18:54


问题

我正在尝试创建一个带有多个页面的GUI。 第一页上有一个按钮,该按钮可升高第二页并更改第二页上的标签文本。 但是,我无法调用应该更改文本的第二页的方法。 有人可以告诉我,为什么调用该方法时出现以下错误?

TypeError:changeLabel()缺少1个必需的位置参数:“ self”

import tkinter as tk


class ExampleApp(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.pack()

        self.frames = {}

        for F in (FirstPage, SecondPage):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame(FirstPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()


class FirstPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        self.buttonFP = tk.Button(self, text="Next Page",
                                  command=lambda : [f() for f in [SecondPage.changeLabel(),
                                                                  controller.show_frame(SecondPage)]])
        self.buttonFP.pack()



class SecondPage(tk.Frame):

    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent)

        self.label = tk.Label(self, text="Test")

        self.label.pack()


    def changeLabel(self):
        """change text of label"""

        newLabel = "changed"
        self.label.configure(text=newLabel)




if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()
python-3.x oop tkinter lambda