鱼C论坛

 找回密码
 立即注册
查看: 4050|回复: 5

[已解决]多线程传递datetime的问题

[复制链接]
发表于 2023-7-20 11:38:48 | 显示全部楼层
很高兴帮你解答问题!在这个代码中,你使用了PyQt5库来创建一个应用程序界面,并使用多线程来获取北京时间并更新界面上的日期时间编辑器。根据你的描述,你遇到了一些问题,需要修改代码。

根据你提供的代码,有几个地方需要进行修改:

首先,在Worker类中,你定义了一个信号finishSignal,但是在连接信号和槽时使用了错误的信号名称sig,你应该将其改为finishSignal。修改后的代码如下:
  1. self.thread = Worker()
  2. self.thread.finishSignal.connect(self.timeBJ)
  3. self.thread.start()
复制代码

其次,在Worker类的run方法中,当使用emit方法发送信号时,需要传递正确的参数类型。你可以使用pyqtSignal的参数列表来指定要传递的数据类型。在这种情况下,你可以使用pyqtSignal(datetime.datetime)来定义信号。修改后的代码如下:
  1. class Worker(QThread):
  2.     finishSignal = pyqtSignal(datetime.datetime)
  3.     def __init__(self, parent=None):
  4.         super(Worker, self).__init__(parent)
  5.     def run(self):
  6.         time.sleep(0.1)
  7.         try:
  8.             url = 'https://beijing-time.org/'
  9.             request_result = requests.get(url=url)
  10.             if request_result.status_code == 200:
  11.                 headers = request_result.headers
  12.                 net_date = headers.get("date")
  13.                 gmt_time = time.strptime(net_date[5:25], "%d %b %Y %H:%M:%S")
  14.                 bj_timestamp = int(time.mktime(gmt_time) + 8 * 60 * 60)
  15.                 self.finishSignal.emit(datetime.datetime.fromtimestamp(bj_timestamp))
  16.         except Exception as exc:
  17.             self.finishSignal.emit(datetime.datetime.now())
复制代码

通过这些修改,你应该能够解决多线程传递datetime的问题。尝试运行修改后的代码,看看是否能够正常获取和显示北京时间。如果还有其他问题,请随时向我提问!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 22:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表