シーンでマウストラッキング
2016/09/02
Widgetで、マウスが動くと呼び出されるメソッドmouseMoveEvent()
は、デフォルトではマウスをドラッグしたときにしか反応せず、常にマウスを動かすたびに呼び出されるようにするには、setMouseTracking(True)
とする必要がある。
でも、QGraphicsSceneの場合は、setMouseTracking()がないので、どうするかというと、
QGraphicsView.viewport().setMouseTracking(True)
とするらしい。
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui
class MyMainWindow(QtGui.QMainWindow):
def __init__(self, *argv, **keywords ):
super(MyMainWindow,self).__init__(*argv,**keywords)
self.view = QtGui.QGraphicsView(self)
self.setCentralWidget(self.view)
self.scene = MyGraphicsScene(self)
self.view.setScene(self.scene)
self.view.viewport().setMouseTracking(True)
self.setGeometry(100,100,500,400)
class MyGraphicsScene(QtGui.QGraphicsScene):
def mouseMoveEvent(self,event):
print(event.scenePos())
def main():
app = QtGui.QApplication(sys.argv)
w = MyMainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
ふー、この情報に行き着くまでやたらかかりました。。。
Problem in MouseMoveEvent
http://www.qtcentre.org/archive/index.php/t-4254.html