覆盖笔记本的继承问题-python,tkinter

问题描述

暂时无法解决这个问题。问题是我无法添加适当的继承方法来覆盖Notebook小部件中选项卡的状态。

如果从规划求解类调用函数,则没有问题。从特定的Frame / Tab类调用登录功能时,我希望具有相同的效果

class Solver(tk.Tk):
    def __init__(self,*args,**kwargs):
        tk.Tk.__init__(self)
        self.notebook = ttk.Notebook()
        self.add_tab()
        self.notebook.pack(expand=True,fill="both")

        self.btn = tk.Button(self,text="test",command=self.loginSuccess)
        self.btn.pack()

    def add_tab(self):
        tab1 = Tab1(self.notebook)
        tab2 = Tab2(self.notebook)


        self.notebook.add(tab1,text="Menu",state="disabled")
        self.notebook.add(tab2,text="Login Page")



    def loginSuccess(self):
        self.notebook.tab(0,state="normal")
        self.notebook.tab(1,state="hidden")

        Root.geometry("380x300")

然后我有2个班级,这些班级是该笔记本电脑的标签页的框架

class Tab1(tk.Frame):
    def __init__(self,master):
        tk.Frame.__init__(self,master)
        self.frame1 = tk.LabelFrame(self,bg="light blue")
        self.frame1.pack(expand=True,fill="both")

        self.lbl = tk.Label(self.frame1,text= "test")
        self.lbl.pack()


# Login
class Tab2(tk.Frame):
    def __init__(self,text="Login",fill="both")

        [...]
        self.loginButton = tk.Button(self,text="  Login  ",command=self.validateLogin)
        self.loginButton.place(x=300,y=75)

    def validateLogin(self):
        pass

我需要验证Login是否与loginSuccess相同,但它是从另一个调用的。

解决方法

嗯,我找到了某种解决方案。因此,我已经从Solver类中隐藏了此按钮,并且在将正确的凭据添加到登录系统后,将扩展GUI并显示按钮。

,

编程的基本原则之一是,您需要引用一个对象才能在该对象上调用方法。因此,如果要调用loginSuccess类的Solver方法,则需要对Solver对象的引用。

最简单的方法之一就是将其传递到选项卡。

首先,将solver作为参数添加到选项卡__init__方法中:

class Tab2(tk.Frame):
    def __init__(self,master,solver):
        tk.Frame.__init__(self,master)
        self.solver = solver
        ...

接下来,让您的函数使用self.solver来调用loginSuccess

    def validateLogin(self):
        self.solver.loginSuccess()

最后,确保将Solver实例传递到标签:

class Solver(tk.Tk):
    ...

    def add_tab(self):
        tab1 = Tab1(self.notebook)
        tab2 = Tab2(self.notebook,solver=self)