动态页面创建 tkinter
Dynamic Page creation tkinter
我正在关注此 link 中的 Python 代码示例。我的最终目标是尝试使用数据库查询创建动态数量的页面。该查询将 return 一个项目列表,我可以创建一个字典条目,将每个项目实例化为一个页面。
我试图通过创建一个页面 class 来创建它,它在字典中实例化,只有一个数字列表,但是我似乎无法显示 StartPage,所有显示的是页面之一。我的源代码:
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
database_pages = [1, 2, 3, 4]
count = 0
for p in database_pages:
page_num = p
frame = Page(container, self)
self.frames[page_num] = frame
frame.grid(row=0, column=0, sticky="nsew")
count += 1
self.frames[count] = StartPage(container, self)
self.show_frame(count)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Page(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="label for Page")
label.pack()
我尝试将其添加为字典条目并调用该键。我没有收到任何错误,但 StartPage 不可见。如何在开始时显示 StartPage?有没有更好的方法来实现这个?
编辑
按照提示,我修改了:
self.frames[count] = StartPage(container, self)
self.show_frame(count)
至:
frame = StartPage(container, self)
self.frames[count + 1] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(count + 1)
感谢您的帮助!
您在创建 StartPage
后没有调用 grid
,因此它将不可见。创建 StartPage
后添加以下内容:
start.grid(row=0, column=0, sticky="nsew")
你有另一个问题,你将 StartPage
放在索引 4 处,但你已经在索引 4 处有一个框架。这不会导致这个问题的问题,但是当你尝试查看其他页面。
我正在关注此 link 中的 Python 代码示例。我的最终目标是尝试使用数据库查询创建动态数量的页面。该查询将 return 一个项目列表,我可以创建一个字典条目,将每个项目实例化为一个页面。
我试图通过创建一个页面 class 来创建它,它在字典中实例化,只有一个数字列表,但是我似乎无法显示 StartPage,所有显示的是页面之一。我的源代码:
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
database_pages = [1, 2, 3, 4]
count = 0
for p in database_pages:
page_num = p
frame = Page(container, self)
self.frames[page_num] = frame
frame.grid(row=0, column=0, sticky="nsew")
count += 1
self.frames[count] = StartPage(container, self)
self.show_frame(count)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class Page(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="label for Page")
label.pack()
我尝试将其添加为字典条目并调用该键。我没有收到任何错误,但 StartPage 不可见。如何在开始时显示 StartPage?有没有更好的方法来实现这个?
编辑
按照提示,我修改了:
self.frames[count] = StartPage(container, self)
self.show_frame(count)
至:
frame = StartPage(container, self)
self.frames[count + 1] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(count + 1)
感谢您的帮助!
您在创建 StartPage
后没有调用 grid
,因此它将不可见。创建 StartPage
后添加以下内容:
start.grid(row=0, column=0, sticky="nsew")
你有另一个问题,你将 StartPage
放在索引 4 处,但你已经在索引 4 处有一个框架。这不会导致这个问题的问题,但是当你尝试查看其他页面。