2013-03-26 6 views
4

어떻게하면 Qt.SIGNAL을 사용하여 마우스 해제 동작을 시뮬레이션 할 수 있습니까? 사용자 상호 작용없이 mouseRelease를 시뮬레이트해야합니다. 미리 감사드립니다.마우스 릴리즈 시뮬레이션 Pyqt

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtGui, QtCore 

class MyWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.pushButtonSimulate = QtGui.QPushButton(self) 
     self.pushButtonSimulate.setText("Simulate Mouse Release!") 
     self.pushButtonSimulate.clicked.connect(self.on_pushButtonSimulate_clicked) 

     self.layoutHorizontal = QtGui.QHBoxLayout(self) 
     self.layoutHorizontal.addWidget(self.pushButtonSimulate) 

    @QtCore.pyqtSlot() 
    def on_pushButtonSimulate_clicked(self): 
     mouseReleaseEvent = QtGui.QMouseEvent(
      QtCore.QEvent.MouseButtonRelease, 
      self.cursor().pos(), 
      QtCore.Qt.LeftButton, 
      QtCore.Qt.LeftButton, 
      QtCore.Qt.NoModifier, 
     ) 

     QtCore.QCoreApplication.postEvent(self, mouseReleaseEvent) 

    def mouseReleaseEvent(self, event): 
     if event.button() == QtCore.Qt.LeftButton: 
      print "Mouse Release" 

     super(MyWindow, self).mouseReleaseEvent(event) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.show() 

    sys.exit(app.exec_()) 

답변

3

여기하는 A QPushButtonclicked 신호를 사용하는 예이다.

mousePress(), mouseClick() 및 기타도 있습니다. 그러나 Windows에서 드래그 & 드래그를 테스트하는 경우 QDrag.exec_() 블록 이후 QTest.mousePress() 블록이 차단되므로주의해야합니다.

+1

내가 찾고있는 곳! Excelent 대답! – karensantana

+0

정확히 동일한 코드를 시도했지만 아무 것도하지 않는 것 같습니다. 프레스 = QMouseEvent (QEvent.MouseButtonPress, POS, Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) ​​ 인쇄 ("Testing2") 방출 = QMouseEvent (QEvent.MouseButtonRelease, POS, Qt.LeftButton, Qt.LeftButton (self.view, press) time.sleep (1) QApplication.postEvent (self.view, release) – d34th4ck3r

1

당신은 사용할 수 있습니다 :

from PyQt4.QtTest import QTest 

#(...) Where you want to release 
QTest.mouseRelease(widget_to_release, Qt.LeftButton) 

이 위젯의 ​​중심에 마우스를 출시 할 예정

관련 문제