pyqt 一种延时方法


date: 2022-08-23 14:23
status: public
title: ‘pyqt 一种延时方法’


方法一

# 声明timer
timer = QtCore.QTimer()
timer.setSingleShot(True)
# 在需要的地方设置定时
timer.start(600)
# 到之间后
timer.timeout.connect(self.funcA)

但是实际测试发现个问题,在多次触发这个延时之后,funcA 会多执行一次。还不知道为什么。

-- trigger -- // 第一次触发
funcA
-- trigger -- // 第二次触发
funcA
funcA
-- trigger -- // 第三次触发,每触发一次 funcA 就多执行一次。
funcA
funcA
funcA
-- trigger --
funcA
funcA
funcA
funcA

方法二

QtCore.QTimer.singleShot(600, self.funcA)

这样得到的结果是符合预期的

-- trigger --
funcA
-- trigger --
funcA
-- trigger --
funcA
-- trigger --
funcA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5中可以使用`QThread`类来创建一个线程。如果要在线程中等待1秒,可以使用`time.sleep()`方法。但是在PyQt5中,不能在主线程内更新UI,因此需要使用信号(Signal)和槽(Slot)机制将结果传递回主线程更新UI。下面是一个示例代码: ```python from PyQt5.QtCore import QThread, pyqtSignal import time import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout class MyThread(QThread): # 定义一个信号,用于传递线程结果 signal = pyqtSignal(str) def __init__(self, parent=None): super(MyThread, self).__init__(parent) def run(self): # 在run()方法中执行操作 time.sleep(1) # 等待1秒 # 发射信号,将结果传递给主线程 self.signal.emit("线程执行完毕") class MainWindow(QWidget): def __init__(self): super().__init__() self.label = QLabel("等待线程执行...") layout = QVBoxLayout() layout.addWidget(self.label) self.setLayout(layout) # 创建线程并连接信号 self.thread = MyThread() self.thread.signal.connect(self.update_label) # 启动线程 self.thread.start() def update_label(self, msg): # 在主线程中更新UI self.label.setText(msg) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了一个自定义的线程类`MyThread`,并在其中使用`time.sleep()`方法等待1秒。在`run()`方法执行完毕后,我们通过`signal`信号将结果传递给主线程。在主线程中,我们连接了`signal`信号和`update_label()`槽,用于更新UI界面上的Label组件。最后,我们启动了线程并显示了主窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值