2017-06-06 48 views
1

这涉及Python和Tkinter。Tkinter框架用super()实例化。为什么我不能让一个标签小部件成为它的孩子?

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

  2. 标签小部件应该是在Tk窗口中的帧的孩子。

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

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访问框架。事实并非如此。

我哪里出错了?

回答

2

你不要pack你的Options部件。试着用:

Options(self).pack() 

另外,我想明确指出OptionsGui的孩子,所以你应该通过gui_parent__init__功能Options对象:

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

谢谢!我不知道必须打包,还是'init'中的gui_parent。还有一个问题:如何修改实例化的Frame的背景颜色?我尝试将它改为'super().__ init __(background ='red')'和'super().__ init __(bg ='red')',我甚至尝试过'self.config(background ='red') '但他们都没有工作。这个想法是在一个红色的背景上有“Meow”。 – anonnoir

+1

@anonnoir:对不起,我真的不知道。尝试看看以下问题:https://stackoverflow.com/questions/11413459/adding-label-to-frame-in-tkinter-ignores-the-attributes-of-frame,https://stackoverflow.com/问题/ 27633545/tkinter-frame-background-disappear-when-i-associate-a-label-to-it,https://stackoverflow.com/questions/16639125/how-do-i-change-the-background-对的一框架中有Tkinter的。 –

+1

我为这些问题中的一些问题准备了答案,尤其是这一个 - https://stackoverflow.com/a/11414185/283169。然后它工作。感谢您的指导! – anonnoir

相关问题