【问题标题】:A Tkinter Frame is instantiated with super(). Why can I not make a Label widget its child?Tkinter Frame 使用 super() 实例化。为什么我不能将 Label 小部件设为其子级?
【发布时间】:2017-06-06 16:16:01
【问题描述】:

这涉及 Python 和 Tkinter。

  1. 我希望有一个标签小部件显示单词“喵”。

  2. Label 小部件应该是 Tk 窗口中的 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(),然后会出现窗口的内容。 (但是这不是“正确”的行为,因为我希望 Label 小部件是 Frame 小部件的直接子级,而不是 Tk 父窗口的直接子级。)

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

我哪里出错了?

【问题讨论】:

    标签: python tkinter tk


    【解决方案1】:

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

    Options(self).pack()
    

    另外,我要明确声明OptionsGui 的子级,所以你应该将gui_parent 传递给__init__ 对象的__init__ 函数:

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

    【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2013-08-12
    • 2022-01-04
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多