화면에는 특정 크기의 화면이있는 동안 장면에 넣은 모든 그래픽 항목을 묶는 특정 경계 사각형이 있습니다.
장면과보기 사이에는 변형 행렬 (배율, 회전, 전단 및 평행 이동에 대한 2x3)이 있습니다. 너는 QGraphicsView.transform()에 의하여 그것을 얻을 수 있는다.
플롯에 장면을 늘리는 더 많은 타원을 넣었지만 여전히 모든 장면을 보려는 경우 축소해야하므로 타원의 너비도 줄어 듭니다.
당신은 원하지 않습니다. 이제 규모가 변경 될 때마다 (현재 배율 인수에 따라) 크기를 조정하지 않는 것이 좋습니다. 음, 이것은 아마도별로 효율적이지 않습니다.
더 나은 해결책은보기의 눈금을 변경하지 않고 줌을 고정 된 상태로 수동으로 위치를 조정하는 것입니다. 그렇게하면 위치를 제외한 항목의 속성을 변경하지 않아도됩니다.
: 당신이 위치를 확장 할 수 있습니다 후이처럼 보이는 마우스 휠로
from PySide import QtGui, QtCore
import random
class MyGraphicsView(QtGui.QGraphicsView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def wheelEvent(self, event):
if event.delta() > 0:
scaling = 1.1
else:
scaling = 1/1.1
# reposition all items in scene
for item in self.scene().items():
r = item.rect()
item.setRect(QtCore.QRectF(r.x() * scaling, r.y() * scaling, r.width(), r.height()))
app = QtGui.QApplication([])
scene = QtGui.QGraphicsScene()
scene.setSceneRect(-200, -200, 400, 400)
for i in range(100):
rect = QtCore.QRectF(random.uniform(-180, 180), random.uniform(-180, 180), 10, 10)
scene.addEllipse(rect)
view = MyGraphicsView(scene)
view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
view.resize(400, 400)
view.show()
app.exec_()
:
예 (PySide와 파이썬 3 만 PyQt는 파이썬이 쉽게 조절을 사용)
크기와 타원 수의 균형에 관해서는 - 여러분이 선택한 것이 전부입니다. 일반적인 규칙은 없습니다. 줄임표를 타원 사이의 거리보다 크게 만들지 않거나 겹치게하는 것이 좋습니다. 일반적으로 뷰의 픽셀 크기가 1 : 1 인 장면 좌표로 작업합니다 (위 예제에서와 같이 뷰의 400 픽셀 너비, 장면 사각형의 400 단위 너비). 그러면 10의 타원 크기가 10 픽셀이라는 것을 쉽게 상상할 수 있습니다. 더 많이 원하면 더 사용하고, 원한다면 덜 사용합니다. 그러나 그것에 대한 규칙은 없습니다. 원하는대로 할 수 있습니다.
노드가 작기 때문에 노드가 작기 때문에 쉽게 더 크게 만들 수 있습니다 (setSceneRect 또는 Qt가 장면을 중앙에 유지하는 것을 잊지 마십시오). 확대하는 동안 타원을 적당한 크기로 유지하려면 내 대답을 참조하십시오. – Trilarion