2017-06-06 52 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

相關問題