本节介绍几个QWidget中父子关系的补充API,childAt()parentWidget()childrenRect()

相关API

  • childAt() :这个API用来获取指定坐标上的控件。如果该位置有控件,则返回控件的位置。如果这个位置没有,则返回None
  • parentWidget() : 获取指定位置控件的父控件
  • childrenRect() : 所有子控件组成的边界矩形

API的使用

对这三个api进行使用演示:

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("父子关系的学习")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件

label1 = QLabel(window)
label1.setText("标签1")

label2 = QLabel(window)
label2.setText("标签2")
label2.move(50, 100)

label3 = QLabel(window)
label3.setText("标签3")
label3.move(100, 100)

# childAt使用案例
print(window.childAt(101, 101))     # 查看(101, 101)位置是否有控件
# 运行结果:  <PyQt5.QtWidgets.QLabel object at 0x0000022FECFAD820>
print(window.childAt(300, 300))     # 查看(300, 300)位置是否有控件
# 运行结果: None

# parentWidget使用案例
print(label2.parentWidget())
# 运行结果: <PyQt5.QtWidgets.QWidget object at 0x0000028202E2D8B0>

# childrenRect使用案例
print(window.childrenRect())
# 运行结果: PyQt5.QtCore.QRect(0, 0, 200, 130)

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

案例演示

要求:

  • 点击哪个标签,就让哪个标签背景变红
  • 使用父控件类,不自定义QLabel子类
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys


#  方法一:重写class,自定义QLabel子类
# class MyLabel(QLabel):
#     def mousePressEvent(self, QMouseEvent):
#         self.setStyleSheet("background-color: red;")

#  方法二:
class Window(QWidget):
    def mousePressEvent(self, evt):
        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;")


# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = Window()
window.setWindowTitle("父子关系案例")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件
for i in range(1, 11):
    label = QLabel(window)
    label.setText("标签" + str(i))
    label.move(40 * i, 40 * i)

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/pyqtchildat.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏