【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制

这篇具有很好参考价值的文章主要介绍了【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

父子关系扩充

常用API

  1. childAt(x, y) 函数可以根据传入的坐标参数获取该QWidget中位于该坐标位置的子QWidget,如果该位置没有子QWidget则返回None。

  2. parentWidget() 函数可以获取当前QWidget的父QWidget,如果没有父QWidget则返回None。通过这个函数可以遍历组成QWidget树的所有QWidget。

  3. childrenRect() 函数可以获取该QWidget中所有子QWidget的组合边界矩形(bounding rectangle),该矩形包括所有子QWidget的位置和大小。可以利用这个函数来计算一个QWidget内所有子QWidget的相对位置和大小,方便进行布局和重绘。

以下为API的使用示例:

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.resize(500, 500)

# 创建三个标签

label = QLabel(window)
label.setText('标签1')
label.move(50, 50)

label2 = QLabel(window)
label2.setText('标签1')
label2.move(100, 100)

label3 = QLabel(window)
label3.setText('标签1')
label3.move(150, 150)

window.show()

print(window.childAt(55, 55))   # 获取55,55的位置的子QWidget
print(label2.parentWidget())    # 获取父Qwidget
print(window.childrenRect())    # 获取该QWidget中所有子QWidget的组合边界矩形


sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python
【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python

案例

案例:创建窗口,包含若干个Label控件。

要求:

  • 点击哪个标签,就让哪个标签背景变红
  • 使用父控件处理,不要自定义QLabel子类

该案例的代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys

class Window(QWidget):
    def mousePressEvent(self, QMouseEvent):
        # 获取鼠标点击的位置,判断是否为QLabel标签
        if QMouseEvent.button() == Qt.LeftButton:
        	# QMouseEvent.x()和QMouseEvent.y()表示获取鼠标在局部控件中的位置
            sub_widget = self.childAt(QMouseEvent.x(), QMouseEvent.y())
            if (sub_widget is not None) and (sub_widget.inherits("QLabel")):
                sub_widget.setStyleSheet('background-color: red;')

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    # 创建三个标签
    for i in range(3):
        label = QLabel(window)
        label.setText(f'标签{i+1}')
        label.move(50*i, 50*i)

    window.resize(300, 300)
    window.show()

    sys.exit(app.exec_())

运行结果:
当点击标签1和标签3时,背景颜色变红。

【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python

层级控制

在PyQt中,QWidget的层级控制允许对不同的QWidget进行层级关系的调整,从而决定它们在屏幕上的显示顺序。以下是一些用于层级控制的常用API:

  1. lower() 函数可以将一个QWidget置于其兄弟QWidget的底部,即降低其显示级别。

  2. raise_() 函数可以将一个QWidget置于其兄弟QWidget的顶部,即提高其显示级别。

  3. a.stakUnder(b) 函数可以将QWidget a置于QWidget b的下方。

示例:
创建两个窗口,观察两个窗口的出现顺序

from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)

w1 = QWidget()
w1.resize(500, 500)
w1.setWindowTitle('w1')

w2 = QWidget()
w2.resize(300, 300)
w2.setWindowTitle('w2')

w1.show()
w2.show()

sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python
通过运行结果我们看出:哪个控件后展示,它的级别就越高。在此例中w2窗口的级别比w1高。

  • 使用以上API将w2降低到底层
w1.show()
w2.show()

w2.lower()  # 将w2降低到底层
# 或
#w1.raise_()
# 或
#w2.stackUnder(w1)

运行结果:
w2降低到底层,被覆盖

【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python

案例

案例:创建一个窗口,在窗口中创建两个部分重叠的标签,实现鼠标点击哪个标签,哪个标签就变为顶层。

案例的代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys


class Window(QWidget):
    def mousePressEvent(self, QMouseEvent):
        if QMouseEvent.button() == Qt.LeftButton:
            sub_widget = self.childAt(QMouseEvent.x(), QMouseEvent.y())
            if (sub_widget is not None) and (sub_widget.inherits("QLabel")):
                sub_widget.raise_()     # 将鼠标点击的标签设置为顶层

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = Window()
    window.resize(500, 500)

    label1 = QLabel(window)
    label1.resize(200, 200)
    label1.setText('标签1')
    label1.setStyleSheet('background-color: red;')

    label2 = QLabel(window)
    label2.resize(200, 200)
    label2.setText('标签2')
    label2.setStyleSheet('background-color: green;')
    label2.move(100, 100)

    window.show()
    sys.exit(app.exec_())

运行结果:

【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制,PyQt5从入门到精通,pyqt,python文章来源地址https://www.toymoban.com/news/detail-732522.html

到了这里,关于【PyQt学习篇 · ⑦】:QWidget - 父子关系扩充和层级控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PyQt学习篇 · ⑨】:QWidget -控件交互

    setEnabled(bool) :该函数用于设置QWidget控件的可用性,参数bool为True表示该控件为可用状态,False表示该控件为不可用状态。当控件处于不可用状态时,该控件将无法响应用户的交互事件。 isEnabled() :该函数用于获取QWidget控件的当前可用状态,返回值为一个bool类型,True表示该

    2024年02月05日
    浏览(42)
  • 【PyQt学习篇 · ⑤】:QWidget - 鼠标操作

    在PyQt中,QWidget类提供了设置鼠标形状的功能。可以使用 setCursor() 方法来更改QWidget及其子类的鼠标形状。该方法接受一个Qt.CursorShape参数,该参数定义了不同的鼠标形状选项。 以下是一些常用的鼠标形状选项及其对应的Qt.CursorShape常量: Qt.ArrowCursor:标准箭头指针。 Qt.UpArr

    2024年02月08日
    浏览(43)
  • PyQt5的学习---01

    Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PySide2、PyQt5可以让我们通过Python语言使用Qt。 但是 PySide2、PyQt5 这两者有什么区别呢? 可以形象地这样说: PySide2 是Qt的  亲儿子  , PyQt5 是Qt还没有亲儿子之前的收的义子。 两个库的使用,差别很小:它们的

    2023年04月25日
    浏览(28)
  • PyQt5学习笔记--多线程处理、数据交互

    目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: ③ 代码: ④ 结果展示: 当点击第一个button时,GUI会出现卡

    2023年04月16日
    浏览(51)
  • PyQt5学习笔记--基于Qt Designer加载、播放和保存视频

    目录 1--基于Qt Designer设计ui文件 2--代码 3--结果 4--补充 5--加载、播放、转换和保存视频的实例 ① 上述代码只实现了加载视频和播放视频的功能,缺少暂停、进度移动等常见功能。 ② 上述代码将 QVideoWidget 通过一个layout布局的形式内嵌到自定义的 QOpenGLWidget 中,但播放测试视

    2024年02月15日
    浏览(47)
  • PyQt5学习笔记--加载Qt Designer设计的ui文件

    目录 1--直接加载ui文件 2--动态加载ui文件及其属性 3--绑定槽函数测试 4--登录程序实例练习 ① Qt Designer 下载地址​​​​​ ② 设计ui并保存导出   ③ 直接加载代码 ​ ① 在Qt Designer设计ui文件:   ② 源程序: ③ 结果测试  

    2024年02月10日
    浏览(50)
  • PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

    目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 ① 创建两个线程, 主线程 为ui线程, 子线程 用于读取摄像头视频,将处理后的图像帧数据(处理操作可以人为添加)返回到主线程进行可视化; ② 子线程向主线程传

    2023年04月09日
    浏览(49)
  • PyQt Qwidget详解:打造自定义窗口界面

    PyQt Qwidget详解:打造自定义窗口界面 PyQt是Python语言下的GUI编程框架,其QWidget类是PyQt的基础组件,主要用于创建多种窗口界面,支持各种控件的添加和布局,可定制化程度高。本文将详细介绍Qwidget类的使用方法,带你打造自定义窗口界面。 创建Qwidget对象 首先,我们需要通

    2024年02月11日
    浏览(44)
  • 基于深度学习mediapipe的人脸打码人脸模糊教程pyqt5界面附源码

    人脸识别是一门比较成熟的技术。 它的身影随处可见,刷脸支付,信息审核,监控搜索,人脸打码等。 更多的时候,它是方便了我们的生活,足不出户,就可以实现各种 APP 的实名认证,信息审核。 一些公司,也都有对内部员工开放的刷脸支付系统,不用带手机,不用带工

    2024年02月02日
    浏览(76)
  • 基于YOLOv8深度学习的智能肺炎诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】

    2024年01月23日
    浏览(117)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包