|
|
发表于 2023-7-20 11:38:48
|
显示全部楼层
很高兴帮你解答问题!在这个代码中,你使用了PyQt5库来创建一个应用程序界面,并使用多线程来获取北京时间并更新界面上的日期时间编辑器。根据你的描述,你遇到了一些问题,需要修改代码。
根据你提供的代码,有几个地方需要进行修改:
首先,在Worker类中,你定义了一个信号finishSignal,但是在连接信号和槽时使用了错误的信号名称sig,你应该将其改为finishSignal。修改后的代码如下:
- self.thread = Worker()
- self.thread.finishSignal.connect(self.timeBJ)
- self.thread.start()
复制代码
其次,在Worker类的run方法中,当使用emit方法发送信号时,需要传递正确的参数类型。你可以使用pyqtSignal的参数列表来指定要传递的数据类型。在这种情况下,你可以使用pyqtSignal(datetime.datetime)来定义信号。修改后的代码如下:
- class Worker(QThread):
- finishSignal = pyqtSignal(datetime.datetime)
- def __init__(self, parent=None):
- super(Worker, self).__init__(parent)
- def run(self):
- time.sleep(0.1)
- try:
- url = 'https://beijing-time.org/'
- request_result = requests.get(url=url)
- if request_result.status_code == 200:
- headers = request_result.headers
- net_date = headers.get("date")
- gmt_time = time.strptime(net_date[5:25], "%d %b %Y %H:%M:%S")
- bj_timestamp = int(time.mktime(gmt_time) + 8 * 60 * 60)
- self.finishSignal.emit(datetime.datetime.fromtimestamp(bj_timestamp))
- except Exception as exc:
- self.finishSignal.emit(datetime.datetime.now())
复制代码
通过这些修改,你应该能够解决多线程传递datetime的问题。尝试运行修改后的代码,看看是否能够正常获取和显示北京时间。如果还有其他问题,请随时向我提问! |
|