2024-09-29 01:24:15 发布
网友
我想有一个简单的图形用户界面4个按钮。如果您只是单击按钮,则应执行功能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_())
在wxPython我会这样做。。。但是您可能需要为您的GUI库调整它。。。在
start_time = None def onLeftDown(e): global running running = True ct =0 while running: ct += 1 do_something(ct) def onLeftUp(e): print "You Pressed For %s Seconds!"%(time.time()-start_time) my_btn = wx.Button(parent,-1,"Click Me!") my_btn.Bind(wx.EVT_LEFT_DOWN,onLeftDown) my_btn.Bind(wx.EVT_LEFT_UP,onLeftUp)
我不是很熟悉QT,但也许你可以修改这个wx代码来做你想做的。。。在
如果使用继承QAbstractButton的小部件,那么在PyQt中很容易做到这一点。不需要任何计时器或单独的线程。只需使用内置的auto-repeat功能,并记录当前状态。在
下面是一个简单的演示:
在wxPython我会这样做。。。但是您可能需要为您的GUI库调整它。。。在
我不是很熟悉QT,但也许你可以修改这个wx代码来做你想做的。。。在
^{pr2}$相关问题 更多 >
编程相关推荐