在使用 pyqt中的QTimer()计时器时,在while循环中启动计时器为什么计时器没有调用槽函数,代码执行逻辑如下
工程功能主要是以太网通信
1.在类初始化时就启动计时器,这个时候槽函数是正常被调用
2.当tcp连接断开时调用 timer.stop()暂停计时器
3.当tcp重新连接上时启动计时器,问题就出在这一步,我写了一个while循环去建立tcp连接,如果服务器启动,则连接成功,计时器启动,此时计时器已经启动了,但槽函数没有连接,这是为什么,求解答
当在类初始化时启动计时器时,槽函数正常被调用是因为已经把计时器和槽函数连接起来了。
当在循环中重新启动计时器时,计时器已经启动了,但槽函数没有被调用是因为在循环中并没有再次连接计时器和槽函数。
为了让计时器在循环中正常工作,需要在循环中每次重新启动计时器之前都要再次连接计时器和槽函数。
可以使用 QTimer.timeout.connect(slot_function) 来连接计时器和槽函数,然后使用 QTimer.start() 方法来启动计时器。
代码示例如下:
timer = QTimer()
# 连接计时器和槽函数
timer.timeout.connect(slot_function)
# 在循环中重新启动计时器
while True:
# 重新连接计时器和槽函数
timer.timeout.connect(slot_function)
# 启动计时器
timer.start()
# 可以试试建立 TCP 连接
if connect_to_server():
break
注意如果使用的是 PyQt5,那么可能需要使用 PyQt5.QtCore.QTimer() 来创建计时器,并使用 PyQt5.QtCore.QTimer.start()
望采纳。
可能需要再启动计时器的时候重新设置一下连接,就像这样:
timer.stop();
timer.timeout.disconnect();
// 重新设置连接
timer.timeout.connect(slot_function);
timer.start();
注意:在设置连接之前,需要先调用 timer.timeout.disconnect() 方法断开原有的连接,否则计时器会被重复调用多次。