【PyQt5】【Day1】QWidget父子关系补充

文章介绍了如何在PyQt5环境中,不重写QLabel子类的情况下,通过监听父控件的鼠标点击事件,利用childAt方法获取被点击的子控件(标签),并在点击时改变其背景色。主要涉及父控件的mousePressEvent方法和childAt方法的使用。
摘要由CSDN通过智能技术生成

childAt(x, y)

  • 作用:获取在指定坐标的子控件
  • 说明:如在一个窗口上有多个子标签,对该窗口使用 childAt(x, y) 方法即可获取在该处坐标的子控件;当该处无子控件时,返回None

parentWidget()

  • 作用:获取指定控件的父控件

childrenRect()

  • 作用:获取该控件的所有子控件组成的边界矩形,返回四个边角的坐标

应用实例

  • 要求:在一窗口上有多个标签,要求在不重写 QLabel 子类的情况下,点击标签时可以使标签背景颜色改变
  • 分析:
    • 要求不能重写子控件的类,那么需要使用上文提到的子控件操作的方法
    • 鼠标点击时会触发鼠标点击事件,当点击在父控件上触发父控件的鼠标点击事件;当点击在子控件上,由于子控件的鼠标点击事件没有重写,将会将鼠标点击事件传递到父控件的鼠标点击事件
    • 所以只需要重写父控件的鼠标点击事件函数,获取该函数触发时的鼠标位置,尝试查找该处鼠标位置的子控件(childAt(x, y)),不为 None 时即为点击到了子控件,此时改变该处子控件颜色即可
  • 代码:
import sys
from PyQt5.Qt import *

app = QApplication(sys.argv)


class Window(QWidget):
	# 重写鼠标点击事件函数
    def mousePressEvent(self, evt) -> None:
        print("鼠标点击")
        print(evt)
        # QMouseEvent
        print(self.childAt(evt.x(), evt.y()))
        # 判断该处是否存在子控件
        if self.childAt(evt.x(), evt.y()) is not None:
            subWidget = self.childAt(evt.x(), evt.y())
            subWidget.setStyleSheet("background-color:blue")


window = Window()
window.setWindowTitle("子控件操作")
window.resize(500, 500)
window.move(400, 200)

# 子标签的定义
for i in range(10):
    label = QLabel(window)
    label.setText("标签{:}".format(i))
    label.move(40*i, 40*i)


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

__Witheart__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值