2013-10-24 3 views
0

PyQt 및 OpenGL에 대한 바인딩을 사용하여 간단한 3D 뷰어에서 작업하고 있습니다. 나는 (솔리드 웍스 예를 들어 같은) 다음 사용자 동작을 구현하고 싶습니다 :PyQt의 Qt.MidButton 및 Qt.MidButton + Qt.ControlModifier를 사용하여 회전 및 이동/이동

  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

관련 문제