PyQt 5无需单击python即可调用函数

时间:2018-09-11 06:09:02

标签: python pyqt pyqt5

嗨,我是python和PyQt的新手,他们已经在使用PyQt 5 lib了,并且已经面临真正的主要问题。

我要调用打印功能(或类似的其他功能),只需移动光标而无需点击。

诸如工具提示之类的东西,不需要单击任何按钮。 谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有几种实现方式:

1。自定义按钮。

from PyQt5 import QtCore, QtWidgets


class HoverButton(QtWidgets.QPushButton):
    hovered = QtCore.pyqtSignal()

    def enterEvent(self, event):
        self.hovered.emit()
        super(HoverButton, self).enterEvent(event)


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        lay = QtWidgets.QVBoxLayout(self)

        btn = HoverButton("Press me")
        btn.hovered.connect(self.onHovered)

        lay.addWidget(btn)
        lay.addWidget(QtWidgets.QLineEdit())

    def onHovered(self):
        print("hovered")


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

2。 eventFilter

from PyQt5 import QtCore, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        lay = QtWidgets.QVBoxLayout(self)

        self.btn = QtWidgets.QPushButton("Press me")
        self.btn.installEventFilter(self)

        lay.addWidget(self.btn)
        lay.addWidget(QtWidgets.QLineEdit())

    def eventFilter(self, obj, event):
        if obj == self.btn and event.type() == QtCore.QEvent.HoverEnter:
            self.onHovered()
        return super(Widget, self).eventFilter(obj, event)

    def onHovered(self):
        print("hovered")


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())