caleb.zhou 2022-12-29 17:54 采纳率: 0%
浏览 29

pyqt 的 QTimer 在while循环中失效

在使用 pyqt中的QTimer()计时器时,在while循环中启动计时器为什么计时器没有调用槽函数,代码执行逻辑如下
工程功能主要是以太网通信
1.在类初始化时就启动计时器,这个时候槽函数是正常被调用
2.当tcp连接断开时调用 timer.stop()暂停计时器
3.当tcp重新连接上时启动计时器,问题就出在这一步,我写了一个while循环去建立tcp连接,如果服务器启动,则连接成功,计时器启动,此时计时器已经启动了,但槽函数没有连接,这是为什么,求解答

  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-29 18:00
    关注

    当在类初始化时启动计时器时,槽函数正常被调用是因为已经把计时器和槽函数连接起来了。

    当在循环中重新启动计时器时,计时器已经启动了,但槽函数没有被调用是因为在循环中并没有再次连接计时器和槽函数。

    为了让计时器在循环中正常工作,需要在循环中每次重新启动计时器之前都要再次连接计时器和槽函数。

    可以使用 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()
    望采纳。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月29日