PyQt的QGraphicsView.mapFromScene的表现方式我不明白

时间:2016-01-10 20:34:32

标签: python python-3.x pyqt4 qgraphicsview qgraphicsscene

我编写了以下示例代码来说明令我困惑的是:

from PyQt4 import QtGui, QtCore
import sys

class Spam(QtGui.QWidget):

    def __init__(self):
        super(Spam, self).__init__()

        self.setGeometry(50, 50, 400, 400)

        self.scene = QtGui.QGraphicsScene(self)
        self.view = QtGui.QGraphicsView(self.scene, self)

    def resizeEvent(self, event):

        self.view.setFixedSize(event.size())

        self.view.setSceneRect(-100, -100, 200, 200)

        rect = self.view.sceneRect()
        print(rect.x(), rect.y(), rect.width(), rect.height())
        print(self.view.mapFromScene(-100, -100))

def run():
    app = QtGui.QApplication(sys.argv)
    GUI = Spam()
    GUI.show()
    sys.exit(app.exec_())
run()

这样做是因为它创建了一个QGraphicsView链接到空QGraphicsScene的窗口,并通过更改视图的大小并将QGraphicsView的sceneRect设置为(-100,-100,以响应resize事件) 200,200)。我相信场景中的点(-100,-100)应对应于视图中的(0,0),因为它是sceneRect的左上角。但是,当我从场景中映射(-100,-100)时,我得到(99,99)并且我不知道为什么。这是上述程序的输出:

>>>
-100.0 -100.0 200.0 200.0
PyQt4.QtCore.QPoint(99, 99)

我在紧接点之前打印了sceneRect的尺寸,以确保它不会因为任何原因从我设置的内容发生变化。我确定我只是遗漏了一些显而易见的东西,但我现在已经看了一段时间而且我不明白发生了什么。

0 个答案:

没有答案