我开始使用这样的代码将函数连接到GUI按钮。
def on_click():
call_other_funct()
time.sleep(1)
button = QPushButton('Do the thing', self)
button.pressed.connect(on_click)
问题是我需要在鼠标按下按钮的过程中每秒重复调用on_click()
。我搜索了很多但没有找到使用PyQt的解决方案。
我一直在尝试使用计时器间隔来解决这个问题
def on_release():
self.timer.stop()
def on_click():
self.timer.start(1000)
self.timer.timeout.connect(on_click())
print('click')
button.pressed.connect(on_click)
button.released.connect(on_release)
这种作品,但由于某种原因,似乎有{指数} on_click()
次呼叫正在发生。 (在第一次通话时,“点击”打印一次,然后两次,然后打印4次,然后打印8次等)。有没有办法使这项工作正常,所以每次调用只会再次调用一次?
或者有更好的方法可以做到这一点吗?
答案 0 :(得分:2)
我怀疑"指数增长"事实上,在事件处理程序on_click
中,您在计时器和事件处理程序本身之间创建了一个连接。所以我希望会发生这样的事情:
on_click
执行一次,计时器连接一次到on_click
on_click
。在执行on_click
期间,计时器再次连接到on_click
。 on_click
两次(由于2个连接)。然后又生成2个连接。你应该做的是将你的计时器连接到另一个功能,当鼠标按钮关闭时,它实际上每隔一秒执行你想要执行的操作。
def on_release():
self.timer.stop()
def on_press():
self.timer.start(1000)
def every_second_while_pressed():
print('click')
button.pressed.connect(on_press)
button.released.connect(on_release)
self.timer.timeout.connect(every_second_while_pressed)