问题描述
暂时无法解决这个问题。问题是我无法添加适当的继承方法来覆盖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")
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)