代码之家  ›  专栏  ›  技术社区  ›  lskrinjar

使用PyQt中的Qt.MidButton和Qt.MidButton+Qt.ControlModifier旋转和平移/平移

  •  0
  • lskrinjar  · 技术社区  · 11 年前

    我正在使用PyQt及其对OpenGL的绑定来制作一个简单的3D查看器。我想实现以下用户操作(例如在solidworks中):

    1. 平移/平移:使用组合 ctrl + middle mouse button (pressed)
    2. 旋转: 鼠标中键(按下)

    和移动鼠标。代码为:

    def mousePressEvent(self, event):
        self.last_pos = event.posF()
    
    def mouseMoveEvent(self, event):
        dxy = event.posF() - self.last_pos
        dx = dxy.x() / self.width()
        dy = dxy.y() / self.height()
        #    rotate - 
        if event.buttons() & Qt.MidButton:
            self.camera.rotate(dx, dy)
        #    translate/pan
        elif (event.buttons() & Qt.MidButton) and (event.modifiers() & Qt.ControlModifier):
            self.camera.pan(dx, dy)
        #    zoom
        self.last_pos = event.posF()
    

    我的问题是当我按下 ctrl公司 然后 middle mouse button 两者( self.camera.rotate(dx, dy) self.camera.pan(dx, dy) )函数被执行,但我只想翻译对象。我想问你,有没有一种方法可以修改转换和旋转的代码,使其与所需的组合键一起工作。现在我没有任何想法。

    1 回复  |  直到 11 年前
        1
  •  1
  •   ekhumoro    11 年前

    这两个操作都需要使用中间按钮。但只有平移/平移需要Ctrl,所以可以使用Ctrl在它们之间切换:

    if event.buttons() & Qt.MidButton:
        if event.modifiers() & Qt.ControlModifier:
            self.camera.pan(dx, dy)
        else:
            self.camera.rotate(dx, dy)