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 Figureimport tkinter as tk from tkinter import ttkLARGE_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] = frameframe.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__':# 实例化Applicationapp = Application()# 主消息循环:app.mainloop()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux软件证券,linux

1.说明在*nix环境下,经常通过源码安装软件。./configure make make install基本上都是定式了。本文对于configure的基本原理进行阐述,并借助http://concurrencykit.org/开源包的configure文件,对于实际的运行过程进行分析。2.configure基本背…

0x08算法设计与分析复习(二):算法设计策略-回溯法2

参考书籍:算法设计与分析——C语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等于另一个给定的正数M。 回溯…

Android源码解析--SwipeMenuListView仿QQ聊天左滑

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50612714 绪论: 好久没写博客了,最近比较懒,不想写博客,但是在看书,看一些Android进阶的书&#…

UVA 125 Numbering Paths

题意 给出方向&#xff08;有向&#xff09;然后判断从一个点到另一个点的方案数。如果有无数条那么对应位置置为-1 直接先dp处理出来。dp[i][j] sum(dp[i][k]*dp[k][j]) 同时如果两点之间有无限条路径。那么这两点之间必然有一环存在。有f[k][k]!0 #include <map> #…

linux 循环执行ip停止服务,java调用远程服务器的shell脚本以及停止的方法实现

最近接了个需求&#xff0c;要求远程调shell脚本&#xff0c;你没听错&#xff01;&#xff01;&#xff01;需求就一句话&#xff0c;咱是谁&#xff0c;咱是优秀的开发选手。考虑再三&#xff0c;有两种实现方式&#xff1a;方案一&#xff1a;脚本所在服务器安装一个客户端&…

mysql-防止XSS攻击

1,防止Xss攻击 数据库查询数据操作,为了防止注入,要执行参数化查询,也就是直接利用execute直接进行sql语句的执行, 因为exexute本身就有接收语句变量的参数位, execute()函数本身就有接受SQL语句变量的参数位&#xff0c;只要正确的使用&#xff08;直白一点就是&#xff1a;使…

java main方法背后的故事?(转)

jvm java 看似一种语言&#xff0c;实则一个巨大的体系的王国&#xff0c;开发这么多年了&#xff0c;还是没有搞懂,我以为我懂了&#xff0c;可是过了一段时间又忘了&#xff0c;所以说还是没懂 1、main方法说起 编译完我们的java文件后&#xff0c;需要有个一含有main方法的类…

亲历腾讯WEB前端开发三轮面试经历及面试题

【一面】~110分钟 2014/09/24 11:20 星期三 进门静坐30分钟做题。 填空题大题问答题 >>填空题何时接触电脑 何时接触前端运算符 字符串处理 延时 display position XMLHttpRequest 正则Jquery绑定事件 cookie >>大题BOM浏览器…

Redis的数据结构之字符串

原文&#xff1a;http://blog.java1234.com/blog/articles/316.html 五种数据类型&#xff1a; 字符串&#xff08;String&#xff09; 字符串列表&#xff08;list&#xff09; 有序字符串集合&#xff08;sorted set&#xff09; 哈希&#xff08;hash&#xff09; 字符串集合…

linux搜索日志组合条件,find查找

find查找是生产中最常见的日志查找工具下面看看它的用法基本用法&#xff1a;find 查找路径 查找标准 查找到以后的处理动作查找路径&#xff1a;需要被查找的文件所在的路径&#xff0c;一定是个目录&#xff0c;默认情况下为当前的目录查找的标准&#xff1a;查找的…

常用的JPA标记 (转)

Table Table用来定义entity主表的name&#xff0c;catalog&#xff0c;schema等属性。 元数据属性说明&#xff1a; name: 表名catalog: 对应关系数据库中的catalogschema&#xff1a;对应关系数据库中的schemaUniqueConstraints:定义一个UniqueConstraint数组&#xff0c;指定…

JavaBean技术的一些讲解

JavaBean: 由于原先的jsp的html代码和css代码以及java代码都是写在一起的&#xff0c;所以看起来就比较冗余&#xff0c;同时 也体现不了javaBean中面向对象的思想的{当然可以同过jstl标签库以及mvc框架来脱离java代码&#xff0c;但是这也是必不可少的} 在这里对于Javabean的一…

linux网卡名称乱编,小斗CentOS7.x网卡名称错乱、及网卡启动失败。

本帖最后由 Zack 于 2018-5-31 13:39 编辑最近在搞CentOS7装机的事情&#xff0c;在此记录期间遇到关于网卡方面的坑&#xff0c;整理分享下&#xff0c;以免大家继续再踩。一、在CentOS7默认装完系统之后网卡名称一改之前的名称习惯&#xff0c;网卡名称为enoxxxxx(之前命名规…

block传值 链接

iOS传值之block传值(一)转载于:https://www.cnblogs.com/dqxu/p/4016117.html

Maven——继承和聚合

实际项目中&#xff0c;可能正要构建一个大型的系统&#xff0c;但又不想一遍又一遍的重复同样的依赖元素&#xff0c;这种情况是经常出现的。不过还好&#xff0c;maven提供了继承机制&#xff0c;项目可以通过parent元素使用继承&#xff0c;可以避免这种重复。当一个项目声明…

隐藏linux操作系统版本信息,linux centos 如何查看操作系统版本信息?

本文介绍常用的四种查看linux下查看系统版本信息的方法&#xff1a;一、uname -a[appVM_11_211_centos ~]$ uname -aLinux VM_11_211_centos 2.6.32-504.30.3.el6.x86_64 #1 SMP Wed Jul 15 10:13:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux二、cat /proc/version[appVM_11_2…

iframe css练习

转载于:https://www.cnblogs.com/wenhuan/p/4019154.html

关于缓存的几篇好文章

追求极致&#xff1a;从技术细节看美团架构 Memcache架构新思考 Memcache应用场景介绍&#xff0c;说明[zz] 大型web系统数据缓存设计-l转载 大型网站后台架构的Web Server与缓存 Intelligence Computing 微博到底有多重视分布式缓存&#xff08;上&#xff09; Beanstalkd 一个…

linux 复制分区文件,dd复制分区后目标分区的大小变成原分区了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我使用了dd if/dev/sda1 of/dev/sdb1这个命令,想复制分区sda1上的所有数据但是我原本sdb1是150G,dd之后,挂载后变成55G了(df -h输出结果)(也就是sda1的大小 )但是我用fdisk -l 得到的信息还是150G请问这种情况如何解决??acePerso…

Elasticsearch 5.2.x 使用 Head 插件连接不上集群

0、前言 时光荏苒&#xff0c;ES转眼间就从2.X跳到了5.X。。。忆往昔峥嵘岁月&#xff0c;奈何ES社区太活跃&#xff0c;版本跳的比房价还快啊。。。话说回来&#xff0c;需要部署一套Elasticsearch 5.2.1 即本月最新推出的ES新力作&#xff0c;发现很多用法已经不一样了。。。…