一、案例说明

本案例是老猿在学习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堆叠窗口程序例子的更多相关文章

  1. PyQt开发案例:结合QDial实现的QStackedWidget堆叠窗口程序例子及完整代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...

  2. 第15.30节 PyQt编程实战:通过eventFilter监视QScrollArea的widget()的Paint消息画出scrollAreaWidgetContents的范围矩形

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...

  3. 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...

  4. 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...

  5. 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...

  6. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...

  7. 第15.9节 PyQt学习入门:使用Qt Designer进行GUI设计的步骤

    在使用Qt Designer进行GUI设计时,一般常规的步骤都是差不多的,主要步骤包括新建显示窗口.在窗口上按照规划的布局放置组件.设置初始化组件的属性.定义信号和槽函数的连接,一般后三步是每增加一个 ...

  8. 第15.34节 PyQt(Python+Qt)入门学习:containers容器类部件QStackedWidget堆叠窗口部件详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 StackedWidget堆叠窗口部件为一系列窗口部件的堆叠,对应类为QStackedWi ...

  9. 第15.7节 PyQt入门学习:PyQt5应用构建详细过程介绍

    一. 引言 在上节<第15.6节 PyQt5安装与配置>结束了PyQt5的安装和配置过程,本节将编写一个简单的PyQt5应用,介绍基本的PyQt5应用的文件组成及相关工具的使用. 本节的应 ...

随机推荐

  1. MySQL全面瓦解8:查询的正则匹配

    概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...

  2. 《为研发同学定制的MySQL面试指南》-- 连载中

    Hi大家好,我是来自博客园的赐我白日梦! 为大家带来MySQL面试专题!全文110篇!以问答的方式,由浅入深的帮你应对各类MySQL面试题的狂轰滥炸!当然也不乏会分享一些高阶读写分离数据库中间件原理及 ...

  3. Tomcat配置管理员用户的账户和密码之快速访问系统。

      技巧前提:当我们在Tomcat服务器下部署项目后(运行中),有时候不知道项目的访问路径或者不想去server.xml里面找对应的访问路径时.   我们可以用以下方法来快速找到对应访问路径: 步骤一 ...

  4. python之《set》

    set 是python里面的集合的概念 list_1 = [1,2,3,4,5,6,] list_2 = set(list_1) print(list_1,type(list_1)) print(li ...

  5. 删除osd的正确方式

    在ceph的集群当中关于节点的替换的问题,一直按照以前的方式进行的处理,处理的步骤如下: 停止osd进程 /etc/init.d/ceph stop osd.0 这一步是停止osd的进程,让其他的os ...

  6. spring boot配置MySQL8.0 Druid数据源

    创建spring boot项目,在pom中添加相应依赖 <!--web--> <dependency> <groupId>org.springframework.b ...

  7. 干货 MySQL常见的面试题 + 索引原理分析

    常见的面试必备之MySQL索引底层原理分析: MySQL索引的本质 MySQL索引的底层原理 MySQL索引的实战经验 面试 1)问题:数据库中最常见的慢查询优化方式是什么? 回答:加索引 2)问题: ...

  8. ci爬坑

    1.row_array() 问题描述:没有数据返回NULL,直接foreach,报错

  9. ABBYY FineReader 14扫描和保存文档

    在ABBYY FineReader 14中您可以使用扫描"新建任务"窗口选项卡上的内置任务创建各种格式的数字文档.本文介绍使用FineReader 14扫描和保存文档的方法. 1. ...

  10. guitar pro系列教程(九):Guitar Pro音谱“编辑”讲解

    对广大音乐人来说,guitar pro不只是一款看谱软件,更是制谱辅助创作的好搭档 打开guitar pro创作软件的 主界面,你会看到"编辑"的字样,单击一下,会弹出下面的界面, ...