使子类从 tkinter 中的父类继承方法

克里斯托夫18

我是 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__和一些属性,但我找不到一种方法来使它正确和工作。

我真的很感激任何帮助。

克里斯托夫18

@JacksonPro 的工作答案

tk.Frame.__init__(self, parent, *args, **kwargs) super().__init__(self) in FormFill class -> super().__init__(parent, *args, **kwargs)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

tkinter 中的子类标签

在 Rspec 中测试子类继承的父类。

C ++中的继承(父类和子类)

Ruby子类不继承父方法或无法在类主体中调用父方法

子类从Ruby的父类继承包含的模块方法

类继承,使用子类设置父类

具有新对象的父类,以及子类中的新对象,对象/方法继承Python

子类可以从 Python 中的父类继承实例变量吗?

如何访问子类中的父类方法

在子类中执行父类的方法

在C ++中,继承父类的正确方法是什么,以便其子类在父类和子类中没有重复的属性?

子类继承父类 self.variable

如何使css子类继承父css类

子类在调用继承的方法(Java)时会使用父类还是子类方法

Python在父类静态/类方法中获取子类

在类减速之外声明的方法无法被javascript中的子类继承

禁止子类docstring中的“基类继承的方法”

Java继承:在超类中调用子类方法

在子类中调用继承的类方法装饰器

Python类继承:如何使用不在父类中的值初始化子类

如何在同名的子类方法中调用父类方法?

在子类中调用父方法

为什么在Java继承期间在父类中声明的数组在子类中不可见?

如何从子类中调用重写的父类方法?

从子类构造函数中访问父类方法

在父类和子类的构造函数中调用重写的方法

如何在Python的子类中调用父类的方法?

为什么父类的静态方法隐藏在子类中?

在父类构造函数调用的方法中访问子类字段