tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

简介:

知识点:

使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序,使得多个 tkinter.Frame 的可见性得以切换

 

本文基于:win7 + python34

 

1

2

3

4

5

复制代码
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.figure import Figure import tkinter as tk from tkinter import ttk LARGE_FONT= ("Verdana", 12) class Application(tk.Tk): ''' 多页面测试程序 界面与逻辑分离 ''' def __init__(self): super().__init__() self.iconbitmap(default="kankan_01.ico") self.wm_title("多页面测试程序") 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 = {} for F in (StartPage, PageOne, PageTwo, PageThree): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") # 四个页面的位置都是 grid(row=0, column=0), 位置重叠,只有最上面的可见!! self.show_frame(StartPage) def show_frame(self, cont): frame = self.frames[cont] frame.tkraise() # 切换,提升当前 tk.Frame z轴顺序(使可见)!!此语句是本程序的点睛之处 class StartPage(tk.Frame): '''主页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这里是主页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="去到第一页", command=lambda: root.show_frame(PageOne)).pack() button2 = ttk.Button(self, text="去到第二页", command=lambda: root.show_frame(PageTwo)).pack() button3 = ttk.Button(self, text="去到绘图页", command=lambda: root.show_frame(PageThree)).pack() class PageOne(tk.Frame): '''第一页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这是第一页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() button2 = ttk.Button(self, text="去到第二页", command=lambda: root.show_frame(PageTwo)).pack() class PageTwo(tk.Frame): '''第二页''' def __init__(self, parent, root): super().__init__(parent) label = tk.Label(self, text="这是第二页", font=LARGE_FONT) label.pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() button2 = ttk.Button(self, text="去到第一页", command=lambda: root.show_frame(PageOne)).pack() class PageThree(tk.Frame): '''第三页''' def __init__(self, parent, root): super().__init__(parent) tk.Label(self, text="这是绘图页", font=LARGE_FONT).pack(pady=10,padx=10) button1 = ttk.Button(self, text="回到主页", command=lambda: root.show_frame(StartPage)).pack() fig = Figure(figsize=(5,5), dpi=100) a = fig.add_subplot(111) a.plot([1,2,3,4,5,6,7,8],[5,6,1,3,8,9,3,5]) canvas = FigureCanvasTkAgg(fig, self) canvas.show() canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True) toolbar = NavigationToolbar2TkAgg(canvas, self) toolbar.update() canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True) if __name__ == '__main__': # 实例化Application app = Application() # 主消息循环: app.mainloop()
复制代码

 

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5170744.html ,如需转载请自行联系原作者
相关文章
|
消息中间件 数据采集 监控
ELK搭建(五):linux系统日志监控平台搭建
现在的生产系统多使用linux系统,在实际生产过程中我们除了需要监控一些业务日志之外,有时也需要监控linux系统本身的日志,来帮助我们进行一些排错和判断。那么这一期,我们就针对linux系统日志监控平台的搭建来进行讲解 与往期一样,我们针对实际搭建教程更多是快速搭建为主,不做过多的原理性讲解,这一类讲解我们放到后期单独开几期博客来探讨。
1385 0
ELK搭建(五):linux系统日志监控平台搭建
|
9月前
|
云安全 存储 安全
阿里云安全体检功能深度评测报告
本次体检通过深度扫描发现了4类安全隐患:高危端口暴露、未修复的Log4j2漏洞、OSS存储桶权限错误。针对这些问题,我们采取了具体修复措施,如限制源IP、热更新参数等。体检项目在安全组可视化、漏洞修复指引等方面表现出色,但也存在容器安全检测不足等问题。建议增加一键阻断功能和OpenAPI接口,优化误报反馈机制,并添加合规检测模块。总体而言,阿里云安全体检在风险发现效率上表现优异,建议与云防火墙等产品联动,形成动态防御体系。
|
存储 编译器 Linux
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
2109 141
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
API 图形学
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
Unity3D 在2018版本中弃用了WWW请求,使用UnityWebRequest 进行网络请求,这个方法是为了满足今天的 HTTP 通信的需求,而且诞生的新类,相对于WWW这个方法,会更灵活一些,但是用起来却很不方便。
1075 0
U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器
|
Docker 容器
Docker服务启动失败报错:Job for docker.service failed because the control process exited with error code.
Docker服务启动失败报错:Job for docker.service failed because the control process exited with error code.
|
存储 数据采集 数据可视化
基于Python flask+MySQL+echart的电影数据分析可视化系统
该博客文章介绍了一个基于Python Flask框架、MySQL数据库和ECharts库构建的电影数据分析可视化系统,系统功能包括猫眼电影数据的爬取、存储、展示以及电影评价词云图的生成。
771 1
|
弹性计算 人工智能 运维
60分钟深度测评阿里云基于大模型构建的操作系统智能助手
OS Copilot 概要 OS Copilot 是阿里巴巴云针对Linux操作系统开发的智能助手,集成在Alibaba Cloud Linux中,利用大模型技术提供自然语言问答、命令行辅助、阿里云CLI调用和系统运维功能。它尤其适合新手,直观的交互方式提升效率。此外,OS Copilot支持在操作系统内直接管理阿里云资源,简化运维任务。目前,该助手仅在特定版本的Alibaba Cloud Linux上可用。体验者可以通过提供的链接和指南进行实操,体验其功能,如命令行的自然语言交互和环境变量配置。OS Copilot在提高用户体验和工作流集成方面的创新,预示着未来AI在操作系统中的广泛应用。
|
域名解析 移动开发 运维
Nacos 集群部署模式最佳实践
本文介绍了 Nacos 的三种部署模式,并就高可用、可伸缩、易用性等方面对各个模式进行介绍。
13350 92
Nacos 集群部署模式最佳实践