我想要一个带4个按钮的简单GUI.如果只是单击按钮,则应执行功能A,对于短按钮按下(例如1秒),应执行功能B,最后应执行长按(例如> 2s)功能C.
想象一下柜台.
如果单击该按钮,它将重置为0
如果您短按按钮,计数器将增加1,例如t = 1秒
如果长按按钮,计数器将增加10,直到释放按钮.
有人有想法吗?我试图通过第二个线程来完成它但我没有找到停止线程的可能性,就像你可以启动它一样
最佳答案 如果你使用一个继承QAbstractButton的小部件,这在PyQt中很容易做到.不需要任何计时器或单独的线程.只需使用内置的
auto-repeat功能,并记录当前状态.
这是一个简单的演示:
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_())