2

我是 PyQt 的新手,我想不通。我正在尝试安装一个 eventFilter,以便当按下并按住 QPushButton 时,系统会以一定的速率递增一个值(这可能是一个 QTimer)。我在同一页面上有第二个 QPushButton,当它被按下并按住时,应该减少值。系统需要区分单击和按住。这是我到目前为止所拥有的,这还不错,但我相信有一种更有效的方法可以做到这一点。

class App(QtGui.QMainWindow, App_Ui_MainWindow):
    def __init__(self, parent=None):
        super(App, self).__init__(parent)
        QtGui.QMainWindow.__init__(self)
        App_Ui_MainWindow.__init__(self)
        self.setupUi(self)

        #Set Up mouse and install event filter.
        self.mouse_state = app.mouseButtons()
        self.mouse_state == QtCore.Qt.LeftButton
        self.increment_Button.installEventFilter(self)
        self.decrement_Button.installEventFilter(self)
        self.hoveringover = 'Null'

        #Timer for when mouse is held down.
        self.mouseheld = QtCore.QTimer()
        self.mouseheld.timeout.connect(self.update)
        self.mouseheld.start(500) #trigger every second.
        self.mouseheld.timeout.connect(self.mouse_held_event)

    #To figure out which/if we are hovering over a button.
    def eventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.Enter:
           self.hoveringover = obj.objectName()
        elif event.type() == QtCore.QEvent.Leave:
           self.hoveringover = 'Null'
        return super(App, self).eventFilter(obj, event)

    def mouse_held_event(self):
        #Set up mouse.
        self.is_mouse_held = 1
        self.mouse_state = app.mouseButtons()
        self.mouse_state == QtCore.Qt.LeftButton
        if int(self.mouse_state) == 1:
            if self.hoveringover == 'increment_Button':
               self.increment()
            elif self.hoveringover == 'decrement_Button':
               self.decrement()
4

0 回答 0