【问题标题】:Use Qt.MidButton and Qt.MidButton+Qt.ControlModifier in PyQt to rotate and translate/pan在 PyQt 中使用 Qt.MidButton 和 Qt.MidButton+Qt.ControlModifier 来旋转和平移/平移
【发布时间】:2013-11-03 14:51:28
【问题描述】:

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

  1. 平移/翻译:组合ctrl+middle mouse button (pressed)
  2. 旋转:middle mouse button (pressed)

和移动鼠标。代码是:

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))函数都被执行,但我只想翻译对象。我想问你有没有一种方法可以修改代码,翻译和旋转将与期望的组合键一起工作。目前我没有任何想法。

【问题讨论】:

    标签: qt python-2.7 pyqt4 pyopengl qtgui


    【解决方案1】:

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

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

    【讨论】:

    • 解决了这个问题。谢谢。
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多