【发布时间】:2020-10-13 22:22:51
【问题描述】:
我暂时无法在几个小时内解决此问题。问题是我无法添加适当的继承方法来覆盖笔记本小部件中选项卡的状态。
如果从 Solver 类调用函数,则没有问题。当从特定的 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, text="Menu", 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, master):
tk.Frame.__init__(self, master)
self.frame1 = tk.LabelFrame(self, text="Login", bg="light blue")
self.frame1.pack(expand=True, fill="both")
[...]
self.loginButton = tk.Button(self, text=" Login ", command=self.validateLogin)
self.loginButton.place(x=300, y=75)
def validateLogin(self):
pass
我需要验证登录将与 loginSuccess 执行相同的操作,但它是从另一个类调用的。
【问题讨论】:
-
“写一个合适的继承方法”是什么意思?您拥有的任何类都不是从任何其他类继承的。你只是在问如何从
Tab2内部调用loginSuccess? -
是的,我已经从这段代码中删除了我的所有尝试,但我认为这里的主要问题是这个类继承自 tk.Tk 和 tk.Frame 不能混合。如果我想尝试这个类 Tab1(Solver,tk.Frame),然后从 Solver 调用方法,它不起作用。这就是我粘贴原始版本的原因,所以也许有解决方案可以从其他类中调用该修改。 self.notebook.tab(0, state="normal") self.notebook.tab(1, state="hidden")
-
" 认为这里的主要问题是这个类继承自 tk.Tk ,和 tk.Frame 不能混合。" 不,这不是问题。这是很常见的事情。
-
您想从标签中调用
loginSuccess,还是让它做与loginSuccess相同的事情? -
两种方式都可以。
标签: python class inheritance tkinter frame