QWidget父子关系扩充

这篇博客介绍了如何在PyQt5中处理控件的鼠标点击事件,以便在点击某个标签时改变其背景颜色。两种方法被提出:一是自定义QLabel子类并在鼠标点击事件中修改样式;二是利用父窗口的childAt()方法找到被点击的子控件并更改其样式。示例代码展示了一个包含多个标签的窗口应用,实现了点击标签背景变红的功能,体现了控件事件处理的通用性。
摘要由CSDN通过智能技术生成

1、原来的QObject中父子关系的扩充。

childAt(x,y)根据坐标x,y的位置确定坐标位置当中所对应的子控件。

parentWidget()获取某一个控件的父控件。

childrenRect()所有子控件组成的边界矩形。

2、案例:创建窗口,包含若干Label控件,要求:点击哪个标签,就让那个标签背景变红,使用父控件处理,不要自定义QLabel子类。

方法一:自定义标签控件,在鼠标点击事件中改背景颜色。

方案二:参照窗口控件处理。通用性更强一点。

from PyQt5.Qt import *
import sys

# 方法一
class Label(QLabel):
    def mousePressEvent(self, QMouseEvent):
        self.setStyleSheet("background-color:red")

# 方法二
class Window(QWidget):
    def mousePressEvent(self, evt):
        #print("被点击了!")
        local_x = evt.x()
        local_y = evt.y()
        sub_widget = self.childAt(local_x, local_y)
        if sub_widget is not None:
            sub_widget.setStyleSheet("background-color:red")
        # 找到该点的子控件,并改背景,没有则不执行任何操作
        #print("被点击了!", local_x, local_y)


app = QApplication(sys.argv)
window = Window()
window.setWindowTitle("父子关系的学习")
window.resize(500, 500)

for i in range(1, 11):
    #label = Label(window)
    label = QLabel(window)
    label.setText("标签" + str(i))
    label.move(30*i, 30*i)

window.show()
sys.exit(app.exec_())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

。七十二。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值