我似乎无法在一个类中获取函数来正确调用 tkinter 中另一个类中的函数 - Python

问题描述 投票:0回答:1

当按下 Class3 的按钮时,我无法让此文本框打印文本。如果我从 Class2 调用相同的函数,那么一切都很好。但从3年级开始就没有那么多了。我仍然可以调用该函数(它甚至打印到控制台),但它不会更改文本窗口。无法弄清楚我错过了什么。我仍在学习 python 课程,因此很难在线表达我的问题以获得所需的结果。

import tkinter as tk

def mainGUI():
    app = Class1()
    app.mainloop()
    

class Class1(tk.Tk):
    def __init__(self):
        super().__init__()
        
        self.title("test")
        frame1 = Class2(self)
        frame1.pack()
        frame2 = Class3(self)
        frame2.pack()


class Class2(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        
        button1 = tk.Button(self, text='Class2 Button', command=self.doStuff)
        button1.pack()

        self.text_box = tk.Text(self)
        self.text_box.pack()

    def doStuff(self):
        self.text_box.insert(tk.END, "You Pushed the button!\n")
        print("I can print to console though")


class Class3(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)

        button2 = tk.Button(self, text='Class3 Button', command=Class2(parent).doStuff)
        button2.pack()

mainGUI()
python class tkinter customtkinter
1个回答
0
投票

Class2 和 Class3 都传递根对象。 他们不需要了解彼此的任何信息——任何连接都应该发生在根类中。

记住,您需要调用该对象的方法,而不仅仅是类。 您现在要做的是在回调中创建一个全新的 Class2 对象——它不是您上面创建的 Class2 对象。 如果Class3需要发送给Class2,正确的方法是让Class3在根中调用回调,然后让根将其转发给需要它的人。 例如:

import tkinter as tk

def mainGUI():
    app = Class1()
    app.mainloop()
    

class Class1(tk.Tk):
    def __init__(self):
        super().__init__()
        
        self.title("test")
        self.frame1 = Class2(self)
        self.frame1.pack()
        self.frame2 = Class3(self)
        self.frame2.pack()

    def class3_button(self):
        self.frame1.doStuff()


class Class2(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        
        button1 = tk.Button(self, text='Class2 Button', command=self.doStuff)
        button1.pack()

        self.text_box = tk.Text(self)
        self.text_box.pack()

    def doStuff(self):
        self.text_box.insert(tk.END, "You Pushed the button!\n")
        print("I can print to console though")


class Class3(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)

        button2 = tk.Button(self, text='Class3 Button', command=parent.class3_button)
        button2.pack()

mainGUI()
© www.soinside.com 2019 - 2024. All rights reserved.