加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python:如何区分长按,短按按钮和单击

发布时间:2020-12-20 11:24:11 所属栏目:Python 来源:网络整理
导读:我想要一个带4个按钮的简单GUI.如果只是单击按钮,则应执行功能A,对于短按钮按下(例如1秒),应执行功能B,最后应执行长按(例如 2s)功能C. 想象一下柜台. 如果单击该按钮,它将重置为0 如果您短按按钮,计数器将增加1,例如t = 1秒 如果长按按钮,计数器将增加10,直
我想要一个带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,**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_())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读