我試圖動態地將子幀添加到主框架小部件。子幀是帶有按鈕的列,我爲子幀創建了一個單獨的類,以便將子幀作爲列表中的對象,以便稍後可以對其進行更改。實際上,額外列的數量也取決於用戶輸入。在Tkinter中添加子幀python3
我首先使用網格管理器將小部件添加到主框架,稍後我使用網格將按鈕添加到子框架。我希望網格在不同的幀中使用時會實現,但是它表現爲子幀類中的網格調用直接在主框架內部而不是在子框內部放置部件。
代碼:
import tkinter as tk
extra_columns = 1
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.grid(sticky="nsew")
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (MainFrame,):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("MainFrame")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class MainFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.subframes = []
self.init_main()
self.init_subframes()
def init_main(self):
self.title = tk.Label(text='Title')
self.title.grid(row=0, column = 2)
for i in range(1, 3):
b = tk.Button(text=str(i))
b.grid(row=i, column=0)
c = tk.Button(text=str(i+10))
c.grid(row=i, column=2+extra_columns+1)
def init_subframes(self):
for i in range(1, extra_columns+1):
m = SubFrame(self)
self.subframes.append(m)
m.grid(row=1, column=2+i, rowspan=5)
class SubFrame(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
for i in range(1, 6):
b = tk.Button(text="extra"+str(i), command=lambda: print("button \
pressed"))
b.grid(row=i, column=0)
root = App()
root.mainloop()
爲了記錄:我顯示主框架(App類內)的方式從教程採取pythonprogramming.net,是我真正的代碼也可使用。
謝謝!
你是否知道'Label','Button'等的第一個參數是父窗口或框架,它應該包含標籤或按鈕? –
謝謝,將master = ...添加到我所有的網格任務中解決了我的問題! –