Xan*_*ndZ 11 python pyqt4 qgraphicsview qgraphicsscene
我正在尝试理解QGraphicsView和QGraphicsScene,特别是如何放置图形项目并将它们显示在我想要的位置.如果场景大于观看区域,我也会在滚动条出现时感到困惑.
例如,这段代码将在顶角创建一个带有椭圆的小图形视图:
import sys
from PyQt4 import QtGui, QtCore
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.scene = QtGui.QGraphicsScene(self)
self.scene.setSceneRect(QtCore.QRectF(0, 0, 245, 245))
self.setScene(self.scene)
self.item = QtGui.QGraphicsEllipseItem(0, 0, 60, 40)
self.scene.addItem(self.item)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
view = MyView()
view.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
但是,如果self.scene.setSceneRect(QtCore.QRectF(0, 0, 245, 245))省略,则即使椭圆具有x,y = 0,0,椭圆也会出现在窗口的中间.我不知道为什么!这种行为有原因吗?
同样,当场景大小大于视图时,我对滚动条的外观感到困惑.例如,以下代码创建一个带有多个椭圆的视图/场景,并且itemsBoundingRect大于sceneRect.仅显示了一些省略号,但没有滚动条可以看到隐藏的省略号,您必须增加窗口的大小.但是当你这样做时,椭圆的位置会发生偏移,因此忽略椭圆的x,y.
import sys
from PyQt4 import QtGui, QtCore
class MyView(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.setGeometry(QtCore.QRect(100, 100, 250, 250))
self.scene = QtGui.QGraphicsScene(self)
self.scene.setSceneRect(QtCore.QRectF(0, 0, 200, 200))
self.setScene(self.scene)
for i in range(5):
self.item = QtGui.QGraphicsEllipseItem(i*75, 10, 60, 40)
self.scene.addItem(self.item)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
view = MyView()
view.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
如果self.scene.setSceneRect(QtCore.QRectF(0, 0, 200, 200))省略该行,则会出现滚动条.但同样,椭圆的x,y位置被忽略,它们在视图中居中.
我要做的是:创建一个视图,其中项目到达我想要的位置,如果项目数导致场景大于视图大小,则滚动条出现但是对于x,y位置要维护的对象.
我觉得我错过了一些重要的视图/场景拼图......
来自文档
如果场景矩形未设置, PySide.QtGui.QGraphicsScene 将使用 PySide.QtGui.QGraphicsScene.itemsBoundingRect() 返回的所有 > 项目的边界区域作为场景矩形。
因此,它将图像的矩形设置为场景矩形,场景的中心是小部件的中心。
当场景矩形大于小部件尺寸时,将出现滚动条。当您注释掉该setSceneRect行时,您的场景会自动调整大小,但是当您有该行时,您的图像将被添加到超出了边界的范围,scenRect因此您必须更新sceneRect才能显示它。
| 归档时间: |
|
| 查看次数: |
15059 次 |
| 最近记录: |