簡體   English   中英

TKinter 中的 Frame 中的 Frame 意外結果

[英]Frame within a Frame in TKinter unexpected results

我試圖在一個框架內放置 2 個框架,該框架又放置在 TKinter 窗口上。 我希望下面的代碼在窗口上生成 4 個相等的幀,然后在第一幀內放置 2 個相等的幀。 我得到的是四個相等的幀,前兩幀各包含一幀。

我正在調用我希望將兩個較小/相等的框架放入的框架,但我似乎正在獲取窗口參考。 從我讀過的內容來看,我相信框架可以放置在框架內。

from tkinter import *

class list_frame (Frame):
    def __init__(self,the_window):
        super().__init__()
        self["height"]=50
        self["width"]=200
        self["relief"]=RAISED
        self["bd"]=8
        self["bg"]="red"

class little_frame (Frame):
    def __init__(self,the_frame):
        super().__init__()
        self["height"]=20
        self["width"]=50
        self["relief"]=RAISED
        self["bd"]=8
        self["bg"]="black"

my_window = Tk()
my_window.geometry("400x300+0+0")

frame_a = list_frame(my_window)
frame_a.grid(row=0, column=0)
frame_b = list_frame(my_window)
frame_b.grid(row=0, column=1)
frame_c = list_frame(my_window)
frame_c.grid(row=1, column=0)
frame_d = list_frame(my_window)
frame_d.grid(row=1, column=1)

frame_e = little_frame(frame_a)
frame_e.grid(row=0, column=0)
frame_f = little_frame(frame_a)
frame_f.grid(row=0, column=1)

my_window.mainloop()

我確信這是一個愚蠢的簡單錯誤,但我沒有看到它,重復的會話並沒有讓它跳出來。

您沒有將父類傳遞給超類__init__ 因此,所有框架都是根窗口的子窗口。

你需要這樣做:

class list_frame (Frame):
    def __init__(self,the_window):
        super().__init__(the_window)
        ...

class little_frame (Frame):
    def __init__(self,the_frame):
        super().__init__(the_frame)
        ...

由於框架不關心包含的小部件是窗口、框架還是任何其他小部件,因此將the_windowthe_frame重命名為masterparent可能會更好

class list_frame (Frame):
    def __init__(self, master):
        super().__init__(master)
        ...

class little_frame (Frame):
    def __init__(self, master):
        super().__init__(master)
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM