<p>如果使用继承QAbstractButton的小部件,那么在PyQt中很容易做到这一点。不需要任何计时器或单独的线程。只需使用内置的<a href="https://qt-project.org/doc/qt-4.8/qabstractbutton.html#autoRepeat-prop" rel="noreferrer">auto-repeat</a>功能,并记录当前状态。在</p>
<p>下面是一个简单的演示:</p>
<pre><code>from PyQt4 import QtGui, QtCore
class Button(QtGui.QPushButton):
def __init__(self, *args, **kwargs):
QtGui.QPushButton.__init__(self, *args, **kwargs)
self.setAutoRepeat(True)
self.setAutoRepeatDelay(1000)
self.setAutoRepeatInterval(1000)
self.clicked.connect(self.handleClicked)
self._state = 0
def handleClicked(self):
if self.isDown():
if self._state == 0:
self._state = 1
self.setAutoRepeatInterval(50)
print 'press'
else:
print 'repeat'
elif self._state == 1:
self._state = 0
self.setAutoRepeatInterval(1000)
print 'release'
else:
print 'click'
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
button = Button('Test Button')
button.show()
sys.exit(app.exec_())
</code></pre>