Tkinter Frame 是用 super() 实例化的。为什么我不能让 Label 小部件成为它的子部件?

A Tkinter Frame is instantiated with super(). Why can I not make a Label widget its child?

这涉及 Python 和 Tkinter。

  1. 我希望标签小部件显示单词 "Meow"。

  2. Label 小部件应该是 Tk window 中 Frame 的 子项。

这看起来很简单,但下面的代码不起作用 - 什么都没有出现:

import tkinter as tk

class Options(tk.Frame):

    def __init__(self, gui_parent):

        super().__init__()
        tk.Label(self, text="Meow").pack()

class Gui(tk.Tk):

    def __init__(self):

        super().__init__()
        Options(self)

gui = Gui()
gui.mainloop()

然后我进行了实验:如果我将 Label 小部件更改为 tk.Label(gui_parent, text="Meow").pack(),那么 window 的内容就会出现。 (但这不是 'correct' 行为,因为我希望 Label 小部件是 Frame 小部件的直接子级,而不是 Tk 父级 window。)

据我了解,super().__init__() 应该实例化了一个框架。然后标签小部件应该能够通过 self 访问框架。事实并非如此。

我哪里出错了?

您没有 pack 您的 Options 小部件。尝试:

Options(self).pack()

此外,我会明确声明 OptionsGui 的子级,因此您应该将 gui_parent 传递给 Options__init__ 函数对象:

def __init__(self, gui_parent):
    super().__init__(gui_parent)
    tk.Label(self, text="Meow").pack()