9

私はQt(PyQt - PySide)にかなり慣れていません。
メニューであるカスタムウィジェットを構築しようとしています。しかし、私は困難な道にぶつかり、自分自身を整理することができないようです. ドキュメントを読みましたが、マウスカーソルが特定のウィジェット上にあるかどうかを確認できるマウスの状態はないと思います。

mouseReleaseEventので関数を呼び出していますQWidget

元。:

def mouseReleaseEvent(self, e):     

このイベントがトリガーされたとき、マウスが実際にウィジェットの上にあるか、ウィジェットの外にあるか (このイベントがトリガーされたウィジェット) を知る必要があります。

    if mouseCursorOverSelf == True:
        # do something ..

どうすればこれを達成できますか?私は何をする必要がありますか?

どうもありがとうございました!

4

2 に答える 2

17

マウスがいつウィジェットに出入りしたかを追跡したい場合は、次のようなものを使用できます。

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

from PyQt4 import QtCore, QtGui

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

    def enterEvent(self, event):
        print "Mouse Entered"
        return super(mainwindow, self).enterEvent(event)

    def leaveEvent(self, event):
        print "Mouse Left"
        return super(mainwindow, self).enterEvent(event)

if __name__ == "__main__":
    import sys

    app  = QtGui.QApplication(sys.argv)
    main = mainwindow()
    main.show()
    sys.exit(app.exec_())

マウスがウィジェットの上にあるかどうかを確認したいだけの場合は、次のQWidget::underMouse ()関数を使用できます。

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

from PyQt4 import QtCore, QtGui

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

        self.button = QtGui.QPushButton("Check Mouse in 3 seconds")
        self.button.clicked.connect(self.on_button_clicked)

        self.layout = QtGui.QHBoxLayout(self)
        self.layout.addWidget(self.button)

    def mouseReleaseEvent(self, event):  
        if self.underMouse():
            print "Do something"

        return super(mainwindow, self).mouseReleaseEvent(event)

    @QtCore.pyqtSlot()
    def on_button_clicked(self):    
        QtCore.QTimer.singleShot(3000, self.checkMouse)

    def checkMouse(self):
        print "Under Mouse: {0}".format(self.underMouse())

if __name__ == "__main__":
    import sys

    app  = QtGui.QApplication(sys.argv)
    main = mainwindow()
    main.show()
    sys.exit(app.exec_())

別の方法では、マウスの位置がウィジェットの内部ジオメトリ内にあるかどうかを確認します。

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

from PyQt4 import QtCore, QtGui

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

        self.setMouseTracking(True)

    def mouseReleaseEvent(self, event):  
        posMouse =  event.pos()
        if self.rect().contains(posMouse):
            print "Under Mouse"

        return super(mainwindow, self).mouseReleaseEvent(event)

if __name__ == "__main__":
    import sys

    app  = QtGui.QApplication(sys.argv)
    main = mainwindow()
    main.show()
    main.resize(200, 200)
    sys.exit(app.exec_())
于 2012-12-30T15:51:43.913 に答える
8

underMouse() は、マウスがウィジェットの上にあるかどうかを判断するために使用する必要があります。
Usage: widget.underMouse()
http://pyqt.sourceforge.net/Docs/PyQt4/qwidget.html#underMouse

于 2016-04-26T04:39:43.260 に答える