PyQt 5在没有单击python的情况下调用函数

问题描述 投票:-1回答:1

嗨,大家好我在python和PyQt已经使用PyQt 5 lib并且已经面临真正的主要问题。

我想调用打印功能(或任何其他类似的功能),只需光标移动,不要点击它。

有点像工具提示,不需要点击任何按钮。谢谢您的帮助。

python pyqt pyqt5
1个回答
0
投票

有几种方法可以实现:

1. customized button.

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_())
© www.soinside.com 2019 - 2024. All rights reserved.