如何将QGraphicView转换到双击的位置?

2024-09-27 07:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将QGraphicView的位置转换为我双击的位置。我尝试了函数translatecenterOn,但都不起作用。所以我觉得我做错了什么

举个简单的例子,如果我使用以下代码:

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys



class SurfViewer(QMainWindow):
    def __init__(self, parent=None):
        super(SurfViewer, self).__init__()
        self.parent = parent
        self.setFixedWidth(600)
        self.setFixedHeight(600)
        photo = PhotoViewer()
        self.setCentralWidget(photo)


class PhotoViewer(QGraphicsView):
    def __init__(self, parent=None):
        super(PhotoViewer, self).__init__(parent)
        self.parent=parent
        self.scene = QGraphicsScene(self)
        self.setScene(self.scene)
        self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
        self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setFrameShape(QFrame.NoFrame)
        self.UpdateScene()
        self.scene.update()

    def mouseDoubleClickEvent(self, event):
        position = QPointF(event.pos())
        position = self.mapToScene(position.x(),position.y())
        print(position)
        print(position.isNull())
        if not position.isNull():
            #self.centerOn(position)
            print(position.x(),position.y())
            self.centerOn(position.x(),position.y())
            self.scene.update()
            self.update()

    def UpdateScene(self,):
        xsize=100
        ysize=100
        newitem = QGraphicsEllipseItem(0-xsize/2., 0-ysize/2., xsize, ysize)
        newitem.setBrush(QBrush(Qt.black, style = Qt.SolidPattern))
        self.scene.addItem(newitem)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = SurfViewer(app)
    ex.setWindowTitle('window')
    ex.show()
    sys.exit(app.exec_( ))

我在视图中间画了一个圆。当我双击视图时,我进入mouseDoubleClickEvent函数,并在用QPointF(event.pos())单击时获得鼠标的坐标。希望这能奏效

现在我希望我得到的位置是视野的中心。所以我试着用translatecenterOn来翻译这个视图,但是什么也没发生。我也试着把相关的地图映射到现场,但那也没用


Tags: fromimportselfinitdefsyspositionscene
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:04

^{}只使位置可见,如果它已经可见,则不会进行任何更改。解决方法是将^{}移动到被压点的中心:

def mouseDoubleClickEvent(self, event):
    p = self.mapToScene(event.pos())
    r = self.sceneRect()
    r.moveCenter(p)
    self.setSceneRect(r)

相关问题 更多 >

    热门问题