You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt6中以中心点为基准绘制矩形?

在PyQt6中以中心点为基准绘制矩形

PyQt6的QPainter没有内置的"中心锚定"绘制模式,你需要手动通过中心点坐标计算出矩形的左上角位置,再调用绘制方法。具体步骤如下:

核心计算逻辑

给定矩形的中心点坐标(center_x, center_y)、宽度w、高度h,矩形左上角坐标的计算公式为:

  • 左上角X坐标:center_x - w/2
  • 左上角Y坐标:center_y - h/2

完整代码示例

下面是一个可直接运行的示例,在窗口中以窗口中心为基准绘制矩形:

from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6.QtGui import QPainter, QPen
from PyQt6.QtCore import Qt
import sys

class CenterRectWidget(QWidget):
    def paintEvent(self, event):
        painter = QPainter(self)
        # 开启抗锯齿,让线条更平滑
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        
        # 设置画笔样式(蓝色、2px粗)
        pen = QPen(Qt.GlobalColor.blue, 2)
        painter.setPen(pen)
        
        # 自定义矩形参数
        center_x = self.width() // 2   # 窗口中心X
        center_y = self.height() // 2  # 窗口中心Y
        rect_width = 200               # 矩形宽度
        rect_height = 150              # 矩形高度
        
        # 计算左上角坐标
        top_left_x = center_x - rect_width / 2
        top_left_y = center_y - rect_height / 2
        
        # 绘制矩形(用drawRectF处理浮点数坐标,避免精度损失)
        painter.drawRectF(top_left_x, top_left_y, rect_width, rect_height)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = CenterRectWidget()
    window.setWindowTitle("以中心点绘制矩形")
    window.resize(400, 300)
    window.show()
    sys.exit(app.exec())

额外优化:封装成工具方法

如果需要多次调用,可以把计算和绘制逻辑封装成一个方法,方便复用:

def draw_rect_from_center(self, painter, center_x, center_y, width, height):
    top_left_x = center_x - width / 2
    top_left_y = center_y - height / 2
    painter.drawRectF(top_left_x, top_left_y, width, height)

之后在paintEvent里直接调用即可:

self.draw_rect_from_center(painter, 200, 150, 200, 150)

内容的提问来源于stack exchange,提问作者negar amiri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:22:34