我是 Tkinter 和 OOP 的新手。我一直试图让子类从父类继承一些方法,因为如果我不这样做,我会重复代码。但是我偶然发现了一个问题,可能是由于我对 Tkinter 和 OOP 的了解有限。
这是我的代码:(它确实简化了,但足以解决完整构建中的问题):
主文件
from app import App
import tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
root.title("Title")
root.minsize(300, 300)
App(root).pack(side="top", fill="both", expand=True)
root.mainloop()
应用程序
import tkinter as tk
from tkinter import ttk
from smalerscale.test import FormFill
class App(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
# notebook variable
self.notebook = ttk.Notebook(self)
self.note1 = FormFill(self)
self.notebook.add(self.note1, text='From')
self.notebook.pack()
form_parent.py
import tkinter as tk
from tkinter import ttk
class FormParent(tk.Frame):
"""Form frame """
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.main_message = tk.Label(self, text="Some text").pack(fill='x', padx=50, pady=5)
def print_something(self):
print(self.main_message)
测试文件
import tkinter as tk
from tkinter import ttk
class FormFill(FormParent):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
super().__init__(self)
print("It works maybe!")
self.print_something()
这是我得到的错误(打印出来的东西,但没有出现窗口):
It works maybe!
None
Traceback (most recent call last):
File "C:/Users/kryst/PycharmProjects/covidForm/smalerscale/main.py", line 8, in <module>
App(root).pack(side="top", fill="both", expand=True)
File "C:\Users\kryst\PycharmProjects\covidForm\smalerscale\app.py", line 17, in __init__
self.notebook.add(self.note1, text='Formulář')
File "C:\Users\kryst\Anaconda3\lib\tkinter\ttk.py", line 844, in add
self.tk.call(self._w, "add", child, *(_format_optdict(kw)))
_tkinter.TclError: can't add .!app.!formfill.!formfill as slave of .!app.!notebook
我很确定我搞砸了__init__
和一些属性,但我找不到一种方法来使它正确和工作。
我真的很感激任何帮助。
@JacksonPro 的工作答案
tk.Frame.__init__(self, parent, *args, **kwargs) super().__init__(self) in FormFill class -> super().__init__(parent, *args, **kwargs)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句