Qpushbutton上的PyQTQ HoverEvent?

时间:2011-08-02 04:58:02

标签: pyqt

您好我一直在寻找我的问题的样本。我有一个按钮,它是通过codes.i创建的10个,现在我的问题是我需要设置一个悬停事件。我一直在阅读QHover,但我仍然无法制作正确的代码。样本不能被初学者理解,请帮帮我。真的需要

编辑:我已经搜索了更多有关此问题的答案。我发现我需要设置 QEvent.HoverEnter 这是正确的吗?

2 个答案:

答案 0 :(得分:1)

我之前已经将mouseMoveEvent的QPushButton子类化,以找出鼠标悬停在它上面的时间。这是一个示例:

from PyQt4.QtGui import QApplication, QMainWindow, QPushButton, \
            QVBoxLayout, QWidget

class HoverButton(QPushButton):
    def __init__(self, parent=None):
        QPushButton.__init__(self, parent)
        self.setMouseTracking(True)

    def mouseMoveEvent(self, event):
        print 'Mouse moved!'

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent) 
        button = HoverButton('Test')
        centralWidget = QWidget()
        vbox = QVBoxLayout(centralWidget)
        vbox.addWidget(button)
        self.setCentralWidget(centralWidget)

def startmain():
    app = QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    import sys
    startmain()

您可以让HoverButton对象发出信号,然后将其他功能连接到主窗口中的信号。

如果您只是想知道鼠标何时进入并离开QPushButton,请改为重新实施enterEventleaveEvent方法。

答案 1 :(得分:0)

在包含按钮的窗口中,您可以实现自己的事件过滤器

class MyWidget(QWebView):
    def __init__(self):
        super(MyWidget, self).__init__()
        self.installEventFilter(self)

    def eventFilter(self, qobject, qevent):
        qtype = qevent.type()
        if qtype == QEvent.HoverMove:
           ... hover logic depending in which qobject, since you have 10 buttons
        return super(MyWidget, self).eventFilter(qobject, qevent)