第15.29节 PyQt(Python+Qt)入门学习:containers容器类部件QScrollArea滚动区域详解

PyQt5的QScrollArea组件的用法 PyQt5的QScrollArea组件为一种控件容器,它的的作用是可以容纳更多的组件,如果组件过多会出现滚动条,滚动条会根据容器的大小与内部组件的大小变化。 使用方法可以参考如下实例 import sys from PyQt5.QtWidgets import * class test(QWidget): def __init__(self): super().__init... 阅读详情

一、概述

Scroll Area提供了一个呈现在其他部件上的可滚动区域视图,滚动区域用于显示框架内的子部件的内容。实际上在Designer中设计部件的部署时,需要提供滚动区域的部件应该放在Scroll Area部件上。
下图是将一个标签文本放到滚动区域之上:
在这里插入图片描述
下图是该标签对应区域:
在这里插入图片描述
可以看到标签的区域在滚动区域之内。

二、滚动区域相关的概念

在学习滚动区域时,老猿才开始以为很简单,属性才两个,结果发现自己被打脸了,测试时发现alignment属性在Designer中没有作用,滚动条的出现以及内容的完整展现都不尽如人意,期间针对部分情况(如《PyQt(Python+Qt)学习随笔:QScrollArea为什么不起作用未出现滚动条?》)弄清楚了结果在某些时候又不一定正确,这种情况持续整整三天多没有进展。

为了解决问题,一方面查找资料,一方面继续各种测试,最后受《QT的自动滚动区QScrollArea的用法,图文详解》一文的启发最终才彻底弄明白。

2.1、滚动区域图例

Designer滚动区域部件对应类QScrollArea,但与QScrollArea有所区别,在此必须介绍一下滚动区域相关的几个重要概念。
下图是一个用Designer设计的可以明确滚动区域相关概念的界面图:
在这里插入图片描述
上图最下面是一个主窗口,在主窗口上面部署了一个Scroll Area的组件(为红色框围住的②号区域),滚动区域内部又存在一个蓝色边框标记的①号区域,可以看到Designer中1号区域是在2号区域内,但①号区域外②号区域内的部分与①号区域的背景是不同的,①号区域的背景是由小点组成的网格,①号区域外②号区域内的部分则是无点的。

2.2、图例相关情况及概念说明
  1. 上述①号区域和②号区域不完全重叠只有在Scroll Area组件的widgetResizable为False时才会出现
    • 当部署完滚动区域且设置widgetResizable为未勾选且设置了滚动区域的布局后,将窗口调整大小后才会出现①号区域和②号区域不完全重叠的情况
    • 调大窗口时①号区域在②号区域内,调小窗口时②号区域在①号区域内;
    • ①号区和②号区域重叠的范围由滚动区域布局的alignment属性确认,如选择对齐方式为左边和顶部对齐,则是左上角的范围重叠。
  2. ②号区域是滚动区域部件可见的的整体范围,老猿将其称为展现层,实际上该层就是滚动区域部件的框架层;
  3. ①号区域是滚动区域上的子部件部署范围,老猿称为内容部署层,子部件只能在内容部署层部署,不能在内容部署层外的展现层内部署;
  4. 内容部署层实际上也是一个独立的部件,在Designer中的该部件在转成应用代码后,名字一般命名为“scrollAreaWidgetContents”或“scrollAreaWidgetContentsXX”(XX表示序号),因此该部件可以称为“滚动区域部件内容”,可以通过滚动区域部件的widget()方法获取到内容部署层对应的部件,进而进一步访问相关属性;
  5. 展现层的大小与滚动区域部件的框架大小一致,并跟随滚动区域的大小变化而变化;
  6. 当展现层范围大于等于内容部署层大小时,操作者无需滚动即可看到完整的滚动区域部署部件;当展现层横向或纵向范围小于内容部署层对应方向大小时,则滚动区域只能展现部分滚动区域部署部件,其他部分需要展现层滚动后才可见;
  7. 在滚动策略设置为按需展现滚动条(ScrollBarAsNeeded)时,只有当展现层的宽(或高)小于内容部署层的宽(或高)时才会出现水平(或竖直)滚动条;
  8. 下面是几种展现层和内容部署层不同场景的截图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里就不穷举所有的模式了。

2.3、滚动区域的属性

基于上面介绍的滚动区域相关概念,我们再来介绍滚动区域的属性。

2.3.1、概述

滚动区域对应类为QScrollArea,该类是从QAbstractScrollArea派生的,除了继承父类的属性外,在Designer中,QScrollArea滚动区域可以设置的自身的属性包括alignment和widgetResizable两个,除了Designer中的这2个属性外,内容部署层对应部件以及滚动区域的布局也是一重要属性。

2.3.2、alignment 属性

滚动区域的alignment属性对应QScrollArea的alignment属性,用于控制滚动区域的内容部署层相对展现层的对齐方式,分为水平和竖直两个方向。对齐方式对应类型为枚举类型Qt.Alignment ,相关取值及含义请参考《PyQt(Python+Qt)学习随笔:QListView的itemAlignment属性》。

各种对齐方式的案例请参考概念部分的截图案例。

可以通过alignment()和setAlignment(Qt.Alignment)方法对QScrollArea的alignment属性进行访问,对QScrollArea的alignment属性的缺省值为左上角对齐,表示内容层在展现层的左上角。

2.3.3、widgetResizable 属性

滚动区域的widgetResizable属性用于控制滚动区域的内容部署层是否应跟随滚动区域的大小变化进行大小跟随调整,当滚动区域框架(即展现层)大小小于内容部署层大小时,需要通过滚动窗口才能看到完整的内容部署层上的内容。

当滚动区域的widgetResizable 属性为False时,在Designer中或应用界面手工调整滚动区域部件的大小时,内容部署层不会跟随调整,但可以通过应用代码进行调整,具体调整方法请见下面介绍。

当滚动区域的widgetResizable 属性为True时,在Designer中或应用界面手工调整滚动区域部件的大小时,内容部署层会跟随调整。但老猿验证widgetResizable 为True时,此时通过应用代码进行调整调整滚动区域部件的大小没有任何效果。

滚动区域的widgetResizable属性缺省为False,可以通过方法widgetResizable()和setWidgetResizable(bool resizable)来访问widgetResizable属性。

2.3.4、内容部署部件属性

内容部署部件即为滚动区域的内容部署层对应部件,可以通过方法widget()和setWidget(QWidget widget)来进行该属性的访问,方法takeWidget()可以将滚动区域对应的内容部署层对应部件移除。

2.3.5、滚动区域的布局属性

滚动区域自带布局属性,通过鼠标右键点击滚动区域部件,选择下图中的layout子菜单即可设置滚动区域的布局:
在这里插入图片描述
滚动区域的布局结合部署在滚动区域部件的大小策略,可以有效展现子部件的内容。如:
在这里插入图片描述
上图中的文本标签是代码生成的超长文本串,如果滚动区域不支持布局,则哪怕扩展滚动区域大小+滚动视图也无法显示完整的标签文本。如图:
在这里插入图片描述

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元,该部分与第十五章的内容基本对应,但同样内容在付费专栏上总体来说更详细、案例更多。本节内容对应付费专栏的《第二十四章、containers容器类部件QScrollArea滚动区域详解》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

PyQt 中使用QScrollArea from PyQt4.QtGui import QWidget, QApplication, QLabel, QScrollArea, QVBoxLayout class Window(QScrollArea): def __init__(self): super(QWidget, self).__init__() layout = QVBoxLayo... 阅读详情

相关推荐

PyQt利用QScrollArea+QLabel制作一个滑动的长文本(QT Designer)

PyQt利用QScrollArea+QLabel制作一个滑动的长文本

孙君的空间站 5722

实战PyQt5: 049-滚动区域控件QScrollArea

问题的提出 在GUI应用中,常常会遇到这样的问题,比如显示一幅大的图像,但显示区域有限,不能完整地显示整个图像,或者能展示界面的区域有限,但是界面中需要展现的控件、内容却很多,在限定的区域内无法全部展示。这个时候我们就需要区域是可以水平和(或)垂直方向可以滚动,以实现对整个图像或者所有控件的浏览。在PyQt中,提供滚动区控件QScrollArea来实现这个功能。 QScrollArea简介 QScrollArea滚动区域控件类提供了关于另一个窗口的滚动的视图,一个滚动区域通常用来显示一个子窗口。如果子

seniorwizard的专栏 8853

QScrollArea类详细介绍(滚动区域)

是 PyQt5 中用于为其他控件提供 ​的容器组件,适用于内容超出可视范围时的滚动查看(如长表单、大图、列表等)。QWidget。

wanglaqqqq的博客 1510

QT的自动滚动区QScrollArea的用法,图文详解

QScrollArea属于控件容器类,可以直接在ui中拖出来。 对于QScrollArea,最难搞懂的就是:如何控制它,才能让它在我们想要出现滚动条的时候出现滚动条。 我们拖入一个QScrollArea,再向他里面拖入4个button,观察信息如下: 可以发现,4个button并不是直接位于QScrollArea中的,而是位于它的成员scorllAreaWidgetConten...

野生猿-群号1025127672 10万+

9 PyQt5 QScrollArea滚动区域和QScrollBar滚动条

PyQt5 滚动区域和滚动条

小泥人日常 5867

PyQt入门学习:QScrollArea滚动区域详解

在PyQt图形用户界面中,经常会遇到需要显示超出容器大小的大量数据的情况。除了显示图片外,QScrollArea还可以用于显示其他QWidget子控件。如需了解更多关于QScrollArea的使用和属性,请参考PyQt官方文档。接着,我们创建一个QMainWindow实例,并将其设置为中央窗口。接下来,我们创建一个QLabel实例并使用setPixmap()方法设置其显示的图片。下面我们来看看如何使用QScrollArea类展示一张大图。运行代码后,就可以看到一张大图并且可以使用滚动条进行查看。

qq_39605374的博客 1003

Python桌面开发pyqt5—QAbstractScrollArea及子类

Python桌面开发pyqt5—QAbstractScrollArea及子类

魏德曼的博客 418

PyQt学习笔记:QScrollArea滚动区域中的布局设置及方法 - Python

本文介绍了如何在PyQt中设置QScrollArea的布局并设置滚动条策略。通过创建一个布局对象并将其设置为QScrollArea的子组件的布局,可以方便地管理滚动区域中的子控件。此外,还可以使用滚动条策略来控制显示滚动条的方式。希望本文对你在PyQt学习过程中有所帮助!如有任何问题,请随时提问。

ByteJolt的博客 912

【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)

目录 1、tab widget 2、scroll area 2.1 使用方法 Step1.拖入QScrollArea ​Step2.改变widget控件布局 ​Step3.设置scrollAreaWidgetContents大小 3、Tool Box 4、Stacked Widget 4.1 案例展示 5、frame 6、MDI AREA 7、dock widget 7.1 悬浮状态 7.2 吸附状态 containers是所有容器的统称,主要是为了容纳不同的对象类型...

python_AI_fans的博客 4581

用PyQt编写图形界面程序时,经常需要使用QScrollArea控件来实现滚动视图

QScrollArea控件是一个可滚动的窗口部件,可以在其中放置其他窗口部件以及自定义的绘图等内容。QScrollArea中的scrollAreaWidgetContents作为它的子部件,是实际内容的展示区域,其大小超过了QScrollArea的大小,因此需要滚动条来向用户展示全部内容。我们继承了QMainWindow类,重写了它的paintEvent方法,在该方法中获取scrollAreaWidgetContents的范围矩形,然后设置画笔并绘制了范围矩形。

m0_47037246的博客 487

手机耳机麦克风(ECM)电路设计实战:从差分走线到射频干扰滤波,一个电阻引发的灵敏度问题

本文深入探讨了手机耳机麦克风(ECM)电路设计中的关键问题,从差分走线到射频干扰滤波,特别关注了一个电阻引发的灵敏度问题。通过实际案例分析,详细解析了ECM麦克风工作原理、偏置电阻选型、差分信号传输设计以及射频干扰抑制策略,为工程师提供了实用的设计指南和优化建议。

weixin_42563415的博客 243

pyqt5 滚动区域控件QScrollArea

【代码】pyqt5 滚动区域控件QScrollArea。

m0_73527922的博客 568

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1410

pyqt5 QScrollArea组件

pyqt5中QScrollArea的使用示例

weixin_43054437的博客 638

深入解析Linux Suspend/Resume机制——从用户态到内核态的完整流程

本文深入解析Linux Suspend/Resume机制,从用户态触发到内核态执行的完整流程。详细介绍了三种挂起模式(Freeze、Standby、Suspend to RAM)的实现原理,包括系统调用入口、状态验证、设备挂起流程及平台相关操作。同时提供实战调试技巧,帮助开发者解决电源管理中的常见问题。

weixin_29313239的博客 444

5分钟搞定!用L型匹配电路优化窄带天线性能(附Smith圆图实操)

本文针对窄带天线阻抗匹配难题,提供了一套5分钟快速解决方案。通过详解L型匹配电路的核心原理,并结合Smith圆图这一射频工程师的“瑞士军刀”,手把手指导如何选择拓扑、计算元件值并进行实际调试,旨在帮助硬件工程师高效优化天线性能,实现最大功率传输。

yyy34的博客 443

PYQT5 QscrollArea(滚动条)的使用

import sys from PyQt5.QtWidgets import * class MainWindow(QMainWindow): def __init__(self,): super(QMainWindow,self).__init__() self.number = 0 w = QWidget() self.setCentralWidget(w) self.topFiller = QWi.

BAIFOL的博客 1782

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8983

【QT】学习课-scrollArea的使用(4)!

有时候我们遇到较大的项目时,标签或者按钮过多,但又不想要很大的界面,这时就可以用到了scrollArea了。(1)找到对象查看器,点击scrollAreaWidgetContents。(2)找到属性编辑器,修改minimumSize高度值就好了。(3)同样的,往右边添加按钮,就修改宽度就好了。1.学习下scrollArea的使用。直接用QT Designer直接生成。

相信过程! 1194

一文读懂GAN, pix2pix, CycleGAN和pix2pixHD

本文翻译、总结自朱俊伟的线上报告,主要讲了如何用机器学习生成图片。 来源:Games2018 Webinar 64期 :Siggraph 2018优秀博士论文报告 人员信息 主讲嘉宾 姓名:朱俊彦(Jun-Yan Zhu) 现状:麻省理工学院博士后(PostDoc at MIT),计算机科学与人工智能实验室(Computer Science and Artificial In...

gdymind的博客 6万+

【YOLOv13多模态融合改进】| CFT:跨模态融合Transformer | 利用Transformer的自注意力机制,解决跨模态融合中的长距离依赖和全局信息整合问题

本文记录的是利用 CFT 模块改进 YOLOv13 的多模态目标检测网络模型。的设计出发点在于解决传统多模态检测中跨模态特征融合不充分的问题,即当不同模态数据需协同检测时,基于CNN的方法因局部卷积的局限性,难以捕捉长距离依赖和全局模态间的互补信息,导致复杂光照、遮挡等场景下检测精度不足。本文利用模块,将多模态特征序列拼接后自动学习模态内与模态间的交互权重,在特征提取阶段整合全局上下文信息,增强对不同模态互补特征的利用能力,从而提升模型在多模态场景下的检测鲁棒性与准确性。Cross-Modality Fus

Limiiiing的博客 540

Pyqt5 scroll 滑动(滚动)条对动态增加的控件进行控制(保姆级教程)

使用Pyqt5中的scroll完成动态控件的控制,并且附带有如何删除Layout中的控件。

Yibaomeimei的博客 8833

【嘉立创EDA】PCB金属包边设计快捷方法

本文使用嘉立创EDA,描述如何在PCB设计时,快速增加边框包边设计,特别是金属包边(伪)——这里标记(伪)是因为该这里的包边特指不含边缘壁。请参考本文时特别注意!本文将此过程记录,以供有需要的读者参考。

l64481000的博客 1741

PyQt中QScrollArea使用自定义的滚动条设置步长问题

滑块的长度通常与页面步长的值相关,通常表示滚动视图中显示的文档区域的比例。页面步长是用户按“向上翻页”和“向下翻页”键时值更改的量,并使用进行设置。对行步长定义的值的较小更改是使用光标键进行的,并且此数量是使用设置的。请注意,使用的值范围与滚动条构件的实际大小无关。在为范围和页面步长选择值时,无需考虑这一点。

m0_58233509的博客 1658

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: PyQt(Python+Qt)学习随笔:QTabWidget部件选项卡可用状态访问方法isTabEnabled、setTabEnabled
下一篇: 第二十五章、containers容器类部件GroupBox分组框详解
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值