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

PyQt中如何在QGraphicsView的指定(x,y)坐标处绘制矩形?

PyQt中如何在QGraphicsView的指定(x,y)坐标处绘制矩形?

嘿,我明白你的困惑啦!你遇到的问题其实是QGraphicsView默认的显示逻辑在搞鬼,绝对不是你笨哦😉

你代码里的addRect(QRectF(10,10,10,10))其实已经把矩形画在场景的(10,10)位置了,但QGraphicsView默认会把场景里的所有内容居中显示——当你的场景内容(这个10x10的小矩形)比视图小很多时,它就会自动被放到视图中心,看起来像是坐标没生效。

解决这个问题很简单,只需要调整一下视图的对齐方式,让场景的左上角和视图的左上角对应起来就行,下面给你两种可行的方案:

方案一:修改视图对齐方式

直接设置QGraphicsView的对齐属性为左上角对齐,这样场景的(0,0)就会和视图的左上角重合,你设置的(10,10)坐标就会准确显示在视图左上角往下、往右各10像素的位置:

from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene
from PyQt5.QtCore import Qt, QRectF
import uic

class Ui(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('Stack.ui', self) 
        
        self.scene = QGraphicsScene()
        self.graphicsView.setScene(self.scene)
        
        # 关键:设置视图对齐方式为左上角对齐
        self.graphicsView.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        
        self.scene.addRect(QRectF(10,10,10,10))
        
app=QApplication([])
window=Ui()
window.show()
app.exec()

方案二:同步场景与视图大小(可选增强)

如果希望场景的范围和视图大小完全一致,避免后续调整视图大小时出现坐标偏移,可以额外设置场景的范围,甚至监听视图的大小变化来同步场景:

from PyQt5.QtWidgets import QMainWindow, QApplication, QGraphicsScene
from PyQt5.QtCore import Qt, QRectF, QEvent
import uic

class Ui(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('Stack.ui', self) 
        
        self.scene = QGraphicsScene()
        self.graphicsView.setScene(self.scene)
        
        # 设置对齐方式
        self.graphicsView.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        # 设置场景范围和视图初始大小一致
        self.scene.setSceneRect(0, 0, self.graphicsView.width(), self.graphicsView.height())
        
        self.scene.addRect(QRectF(10,10,10,10))
        
    # 重写resizeEvent,视图大小变化时同步场景范围
    def resizeEvent(self, event: QEvent):
        super().resizeEvent(event)
        self.scene.setSceneRect(0, 0, self.graphicsView.width(), self.graphicsView.height())
        
app=QApplication([])
window=Ui()
window.show()
app.exec()

这样调整后,你画的矩形就会准确出现在你指定的(10,10)位置啦!

备注:内容来源于stack exchange,提问作者M.R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:20:30