2013-10-24 41 views
0

我正在使用PyQt及其綁定OpenGL的簡單3D查看器。我想,實現下面的用戶操作(如例如在SolidWorks):在PyQt中使用Qt.MidButton和Qt.MidButton + Qt.ControlModifier來旋轉和平移/ pan

  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))功能被執行,但我想只是翻譯的對象(或多個)。我想問你是否有辦法修改代碼,以便翻譯和旋轉可以與願望鍵組合一起工作。現在我沒有任何想法。

回答

1

這兩個操作都需要中間按鈕。但只有平移/平移需要Ctrl,所以用它來在它們之間切換:

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

解決了這個問題。謝謝。 – avstenit