[英]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_window
和the_frame
重命名為master
或parent
可能會更好
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.