74 lines
1.9 KiB
Python
74 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import time
|
|
|
|
import requests
|
|
|
|
from PySide6.QtCore import (QThread, Signal, Slot, QSize)
|
|
from PySide6.QtWidgets import (QApplication, QPushButton, QLabel, QVBoxLayout, QWidget)
|
|
class WorkerThread(QThread):
|
|
# 定义一个信号,用于在线程中发送数据给主线程
|
|
update_label = Signal(str)
|
|
|
|
def run(self):
|
|
while True:
|
|
for i in range(5):
|
|
time.sleep(2) # 模拟耗时操作
|
|
self.update_label.emit(f"{i + 1}")
|
|
|
|
class MyThread(QThread):
|
|
signal_tuple = Signal(tuple)
|
|
|
|
|
|
def run(self):
|
|
while True:
|
|
for idx in range(1, 10):
|
|
time.sleep(2)
|
|
# 任务完成后发出信号
|
|
self.signal_tuple.emit((idx, ''))
|
|
|
|
|
|
class MainWindow(QWidget):
|
|
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent=parent)
|
|
self.setup_ui()
|
|
#
|
|
self.button.clicked.connect(self.setup_thread)
|
|
|
|
def setup_ui(self):
|
|
self.setWindowTitle('demo')
|
|
self.resize(QSize(250, 180))
|
|
# 创建一个垂直布局
|
|
layout = QVBoxLayout()
|
|
# 创建一个标签
|
|
self.label = QLabel('This is a label => ')
|
|
layout.addWidget(self.label)
|
|
# 创建一个按钮
|
|
self.button = QPushButton('Send Request')
|
|
layout.addWidget(self.button)
|
|
# 将布局设置为主窗口的布局
|
|
self.setLayout(layout)
|
|
# 显示窗口
|
|
self.show()
|
|
|
|
def setup_thread(self):
|
|
self.thread_ = MyThread()
|
|
self.thread_.signal_tuple.connect(self.thread_finished)
|
|
self.thread_.start()
|
|
|
|
def send_request(self):
|
|
return requests.get('https://www.csdn.net/').text[:15]
|
|
|
|
@Slot(tuple)
|
|
def thread_finished(self, item):
|
|
self.label.setText('This is a label => ' + str(item))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app = QApplication([])
|
|
window = MainWindow()
|
|
window.show()
|
|
app.exec()
|
|
|