第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子
一、案例说明
本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStackedWidget展示一个文件目录下的图片文件,可以有多种实现方式,在本案例中一个图片文件使用QStackedWidget的一个页面窗口展现,有多少图片文件就有多少页面窗口。
二、案例实现
2.1、ui界面设计
2.1.1 设计一个显示图象文件的窗口对象

该对象中包括一个窗口(QWidget类型的窗口,名称为GraphicFileView)和两个子对象,最上面是一个显示图像文件名的label(名称为graphicFileName),下面是一个显示图像文件的QGraphicsView对象(名称为graphicsView),整个ui保存在文件ui_GraphicFileView.ui中。
这个UI窗口用于显示一个图像文件,其实例对象作为QStackedWidget的一个页面窗口部件对象。
2.1.2、 设计主界面窗口对象

主界面窗口除了主窗口(类型QWidget,名为mainWin)对象外,还有2个对象,分别是QStackedWidget堆叠窗口对象(名为stackedWidget),另外有一个QDial对象,名为dial。
其中stackedWidget就是用于保存所有展示图像的窗口,dial是一个表盘,用于控制stackedWidget当前页面窗口的索引,表盘上每个刻度对应一个顺序索引的数字,该表盘通过鼠标可以旋转到任意刻度,可以使用光标控制的上键和下键逆时针或顺时针移动一个刻度。
2.2、实现图像显示类
图像显示类从ui_GraphicFileView.ui生成的ui_GraphicFileView.py模块的Ui_GraphicFileView类派生一个子类graphicFileView,该子类实现从指定图像文件装载图像展示,并通过名字为graphicFileName的label展示图像文件名。
下面是graphicFileView相关代码的大致结构:
class graphicFileView(QtWidgets.QWidget,ui_GraphicFileView.Ui_GraphicFileView):
def __init__(self,filename=None):
super().__init__()
self.setupUi(self)
self.loadGraphicFile (filename)
def loadGraphicFile(self,fileName):
if fileName:
#装载图片文件
......
2.3、实现主窗口类
主窗口类从ui_mainwin.Ui_mainWin派生,包括构造方法__init__、堆叠窗口初始化方法initPages、表盘初始化方法initDial、表盘刻度变化槽方法valueChanged。
相关代码结构大致如下:
class mainWin(QtWidgets.QWidget,ui_mainwin.Ui_mainWin):
def __init__(self):
super().__init__()
self.setupUi(self)
self.initPages()
self.dial.valueChanged.connect(self.valueChanged)
def initPages(self):
dir = "F:\\学习\\python\\project\\stackWidget\\资源"
self.itemCountMinus12 = False
......
for file in files:
graphicView = graphicFileView.graphicFileView(filename)
self.stackedWidget.addWidget(graphicView)
print(filename)
self.stackedWidget.setCurrentIndex(0)
self.initDial()
def initDial(self):
if self.itemCountMinus12:self.dial.setSingleStep(12)
else: self.dial.setSingleStep(1)
......
def valueChanged(self,value):
index = value
......
if index:self.stackedWidget.setCurrentIndex(index-1)
else:self.stackedWidget.setCurrentIndex(count)
注意:
- 在处理表盘刻度时,根据目录下的文件数量做了个处理,如果文件数量小于12个,则将最大刻度值设置为文件数量乘以12,这样做的目的是为了将表盘的空间最小做到12等分
- 堆叠窗口的个数与文件个数相同,在Designer中设计时将Designer中默认创建的两个页面窗口删除了,所有页面窗口全部由initPages方法重新创建
- 程序中没有异常处理
三、运行界面截图
下面是运行时的两个截图:


广告
老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《PyQt开发案例:结合QDial实现的QStackedWidget堆叠窗口程序例子及完整代码》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!
第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子的更多相关文章
- PyQt开发案例:结合QDial实现的QStackedWidget堆叠窗口程序例子及完整代码
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...
- 第15.30节 PyQt编程实战:通过eventFilter监视QScrollArea的widget()的Paint消息画出scrollAreaWidgetContents的范围矩形
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...
- 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...
- 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...
- 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...
- 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解
老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...
- 第15.9节 PyQt学习入门:使用Qt Designer进行GUI设计的步骤
在使用Qt Designer进行GUI设计时,一般常规的步骤都是差不多的,主要步骤包括新建显示窗口.在窗口上按照规划的布局放置组件.设置初始化组件的属性.定义信号和槽函数的连接,一般后三步是每增加一个 ...
- 第15.34节 PyQt(Python+Qt)入门学习:containers容器类部件QStackedWidget堆叠窗口部件详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWi ...
- 第15.7节 PyQt入门学习:PyQt5应用构建详细过程介绍
一. 引言 在上节<第15.6节 PyQt5安装与配置>结束了PyQt5的安装和配置过程,本节将编写一个简单的PyQt5应用,介绍基本的PyQt5应用的文件组成及相关工具的使用. 本节的应 ...
随机推荐
- java开发就业信息管理系统
本文实例为大家分享了java就业信息管理平台开发案例,供大家参考,具体内容如下 可查询公司信息,学生信息,班级信息,针对学生就业与否信息的统计,老师和管理员登录后的权限不同等就业信息管理平台想要实现的 ...
- Pycharm激活码(2020最新永久激活码)
如果下边的Pycharm激活码过期失效了的话,大家可以关注我的微信公众号:Python联盟,然后回复"激活码"即可获取最新Pycharm永久激活码! 56NPDDVEIV-eyJs ...
- hibernate3.6-联合主键注解以及openSession和getCurrentSession区别
[联合主键]>>>>配置方式:xml: 1. Student中单独创建StudentPk主键实体类 2. 配置: <composite-id name=" ...
- [转自王垠]完全用GNU/Linux工作,摈弃Windows低效率的工作方式
ZT (a qinghua student's article) 我已经半年没有使用 Windows 的方式工作了.Linux 高效的完成了我所有的工作. GNU/Linux 不是每个人都想用的.如果 ...
- nginx&http 第四章 ngx http代理 && 转载
Nginx访问上游服务器的流程大致分以下几个阶段:启动upstream.连接上游服务器.向上游发送请求.接收上游响应(包头/包体).结束请求. upstream相关的两个重要数据结构ngx_http_ ...
- 文本多行省略号(CSS最优方案)
Float定位溢出隐藏 优点: 纯CSS实现,性能好,不用js调优 兼容性高 多行省略,自动显示 缺点: 单词截断 代码如下: <div class="ellipses-div&quo ...
- 01、Spring环境搭建
环境:SpringSource-Tool-3.9.9.Eclipse4.10.0 首先,我们需要解决的是Spring包的问题,我看了百度.CSDN很多都是直接一上来随便丢个包就可以安装了,搞得我弄了一 ...
- 从 3.1 到 5.0 —— OpenReservation 更新记
OpenReservation 从 asp.net core 3.1 到 5.0 Intro OpenReservation 是一个开源的预约系统,最初的版本是我们学校的活动室预约系统,现在正逐步变成 ...
- Unity Lod
LOD是Level Of Detais 的简称,多细节层次,根据摄像机与物体距离,unity会自动切换模型.一般离摄像机近的时候显示高模,离摄像机远的时候显示低模,借此来提升性能. 如果你在Blend ...
- 【进阶之路】Mybatis-Plus中乐观锁@version注解的问题与解决方案
大家好,我是练习java两年半时间的南橘,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西.知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了 ...