📜  PyQt5 QSpinBox – 从子区域获取边界矩形(1)

📅  最后修改于: 2023-12-03 14:45:49.689000             🧑  作者: Mango

PyQt5 QSpinBox - 从子区域获取边界矩形

在 PyQt5 中,QSpinBox 是用于显示和编辑整数值的小部件之一。但是,在编写应用程序时,有时可能会需要获取到 QSpinBox 的子区域的边界矩形,以便在其周围绘制其他图形。

获取边界矩形

在 PyQt5 中,通过使用 QSpinBox.childEvent() 函数来获取 QSpinBox 的子区域。此函数会在 QSpinBox 的子窗口事件 (例如:添加或移除子窗口) 发生时被调用。

接下来,我们可以使用 QRect() 函数来获取子区域的边界矩形。在 childEvent() 方法中,我们可以使用以下代码来获取 QSpinBox 的边界矩形:

def childEvent(self, event):
    if event.type() == QEvent.ChildAdded:
        # Get child widget's rect
        child = event.child()
        rect = child.rect()

在上面的代码中,我们首先检查发生的事件是否是 QEvent.ChildAdded 类型的子窗口事件。如果是,我们获取新添加的子窗口(即 QSpinBox 的按钮),并使用 rect() 函数获取其边界矩形。

现在,我们可以将返回的边界矩形传递给其他函数,并用它来绘制所需图形。

完整代码

以下是一个简单的 PyQt5 应用程序示例,用于演示如何从 QSpinBox 子区域获取边界矩形:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class MySpinBox(QSpinBox):
    def __init__(self):
        super().__init__()

    def childEvent(self, event):
        if event.type() == QEvent.ChildAdded:
            # Get child widget's rect
            child = event.child()
            rect = child.rect()
            print(rect)


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # Create a MySpinBox widget
        spinbox = MySpinBox()

        # Set the layout
        layout = QHBoxLayout()
        layout.addWidget(spinbox)
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

在上面的代码中,我们创建了一个名为 MySpinBox 的 QSpinBox 子类和一个名为 MyWindow 的 QWidget 子类。在 MySpinBox 类中,我们覆盖 childEvent() 方法来获取 QSpinBox 的按钮的边界矩形。在 MyWindow 类中,我们创建了一个 MySpinBox 的实例,并将其放置在水平布局中。

当您运行此应用程序时,它将输出 QSpinBox 按钮的边界矩形的坐标。您可以使用这些坐标来绘制其他图形。