如何在Tkinter中实现单窗口页面切换(非新建标签页)
在CustomTkinter中实现同一窗口内的页面切换(非标签页)
要实现同一窗口主区域的内容切换,无需标签页,核心思路是把每个页面封装成独立的CTkFrame,通过控制框架的显示/隐藏完成切换。以下是修改后的完整代码:
import customtkinter class App(customtkinter.CTk): def __init__(self): super().__init__() self.title("Test") self.geometry(f"{800}x{600}") self.grid_columnconfigure(1, weight=1) self.grid_columnconfigure((2, 3), weight=0) self.grid_rowconfigure((0, 1, 2), weight=1) # 侧边栏框架 self.sidebar_frame = customtkinter.CTkFrame(self, width=140, corner_radius=0) self.sidebar_frame.grid(row=0, column=0, rowspan=4, sticky="nsew") self.sidebar_frame.grid_rowconfigure(4, weight=1) self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="test", font=customtkinter.CTkFont(size=20, weight="bold")) self.logo_label.grid(row=0, column=0, padx=20, pady=(20, 10)) # 侧边栏按钮 self.sidebar_button_1 = customtkinter.CTkButton(self.sidebar_frame, command=self.show_page_sim, text="test1") self.sidebar_button_1.grid(row=1, column=0, padx=20, pady=10) self.sidebar_button_2 = customtkinter.CTkButton(self.sidebar_frame, command=self.show_page_data, text="t2") self.sidebar_button_2.grid(row=2, column=0, padx=20, pady=10) self.sidebar_button_3 = customtkinter.CTkButton(self.sidebar_frame, command=self.show_page_live, text="t3") self.sidebar_button_3.grid(row=3, column=0, padx=20, pady=10) # 创建三个页面框架 self.page_sim = customtkinter.CTkFrame(self) self.page_sim.grid(row=0, column=1, rowspan=4, sticky="nsew") # Test1页面内容示例 customtkinter.CTkLabel(self.page_sim, text="这是Test1页面内容", font=customtkinter.CTkFont(size=18)).pack(expand=True) self.page_data = customtkinter.CTkFrame(self) self.page_data.grid(row=0, column=1, rowspan=4, sticky="nsew") self.page_data.grid_remove() # 初始化隐藏 # t2页面内容示例 customtkinter.CTkLabel(self.page_data, text="这是t2页面内容", font=customtkinter.CTkFont(size=18)).pack(expand=True) customtkinter.CTkButton(self.page_data, text="t2专属按钮").pack(pady=20) self.page_live = customtkinter.CTkFrame(self) self.page_live.grid(row=0, column=1, rowspan=4, sticky="nsew") self.page_live.grid_remove() # 初始化隐藏 # t3页面内容示例 customtkinter.CTkLabel(self.page_live, text="这是t3页面内容", font=customtkinter.CTkFont(size=18)).pack(expand=True) customtkinter.CTkEntry(self.page_live, placeholder_text="t3输入框").pack(pady=10) # 默认显示第一个页面 self.current_page = self.page_sim def show_page_sim(self): self.current_page.grid_remove() self.page_sim.grid() self.current_page = self.page_sim def show_page_data(self): self.current_page.grid_remove() self.page_data.grid() self.current_page = self.page_data def show_page_live(self): self.current_page.grid_remove() self.page_live.grid() self.current_page = self.page_live if __name__ == "__main__": app = App() app.mainloop()
关键实现细节:
- 每个页面都是独立的
CTkFrame,布局在主窗口的同一位置(column=1,rowspan=4) - 使用
grid()显示框架,grid_remove()隐藏框架(隐藏后不占用布局空间) - 用
current_page变量记录当前显示页面,切换时统一隐藏当前页面再显示目标页面 - 可在每个页面框架内自由添加组件,各页面完全独立
内容的提问来源于stack exchange,提问作者Underscore
相关产品推荐
相关产品推荐

