一、案例说明

本案例是老猿在学习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. python爬虫03 Urllib库

    Urllib   这可是 python 内置的库 在 Python 这个内置的 Urllib 库中 有这么 4 个模块 request request模块是我们用的比较多的 就是用它来发起请求 所以我 ...

  2. 二维码生成与windows系统IP查询功能

    一个木函是一款强大的手机软件,里面囊括了很多小功能,每一个都基本可以堪称小程序.那么,这些小功能具体是怎么实现的呢?让我们来一起来探讨二维码生成.IP查询这两个功能吧! 一.二维码生成 首先,我们来看 ...

  3. OpenCV之图像归一化(normalize)

    什么图像归一化 通俗地讲就是将矩阵的值通过某种方式变到某一个区间内 图像归一化的作用 目前能理解的就是归一化到某个区间便于处理,希望高人可以指点 opencv文档中的介绍 C++: void norm ...

  4. linux文件增删拷(touch/mkdir/cp/mv/rm)

    touch或>命令创建普通文件: [root@localhost test]# touch a  ---创建单个文件 [root@localhost test]# ls a [root@loca ...

  5. 什么是低代码(Low-Code)?

    阿里云 云原生应用研发平台EMAS 彭群(楚衡) 一.前言 如果选择用一个关键词来代表即将过去的2020年,我相信所有人都会认同是"新冠".疫情来得太快就像龙卷风,短短数月就阻断了 ...

  6. 编译一个Centos6.4下可用的内核rpm升级包-3.8.13内核rpm包

    在Centos6.4下进行内核升级,采用内核源码的升级方式比较简单,但是需要升级的机器多的情况下进行内核升级就比较麻烦,并且编译内核的速度依赖于机器的性能,一般需要20分钟,而通过rpm内核包的方式进 ...

  7. mysql 数据库存储路径更改

    使用了VPS一段时间之后发现磁盘空间快满了.本人的VPS在购买的时候买了500gb的磁盘,提供商赠送了20GB的高性能系统磁盘.这样系统就有两个磁盘空间了.在初次安装mysql 的时候将数据库目录安装 ...

  8. Python_爬虫_百度图片

    百度图片有些有编码问题,暂时不能爬取,多试几个 #思路:抓取图片地址,根据地址转存图片(注意名称):难点:转码 # -*- coding:utf-8 -*- from urllib import re ...

  9. [LeetCode题解]23. 合并K个升序链表 | 分治 + 递归

    方法一:分治 + 递归 解题思路 在21. 合并两个有序链表,我们知道如何合并两个有序链表.而本题是合并 k 个有序链表,可以通过大问题拆分成小问题解决,即把 k 个链表,拆分成 k/2 个链表组,俩 ...

  10. 免费|申请谷歌云服务器|msf安装

    apt-get install -y wget 参考链接 知乎-免费|申请谷歌云服务器 知乎-免费|申请谷歌云服务器 cnblogs-debian.ubuntu安装metasploit通用方法 谷歌云 ...