以下是一个使用PyQt5执行网络请求并在执行过程中显示一个执行中的对话框的完整代码示例:
一、继承QDialog实现
import sys
import requests
from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout
from PyQt5.QtCore import Qt, QThread, pyqtSignal
class RequestThread(QThread):
finished = pyqtSignal(bool)
def __init__(self, url):
super().__init__()
self.url = url
def run(self):
try:
response = requests.get(self.url)
if response.status_code == 200:
self.finished.emit(True)
else:
self.finished.emit(False)
except:
self.finished.emit(False)
class ProgressDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("执行中")
self.setFixedSize(200, 100)
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)
layout = QVBoxLayout(self)
self.label = QLabel("正在执行,请稍候...", self)
layout.addWidget(self.label, alignment=Qt.AlignCenter)
def setMessage(self, text):
self.label.setText(text)
class MainWindow(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("网络请求")
self.setFixedSize(300, 100)
layout = QVBoxLayout(self)
self.label = QLabel("点击按钮执行网络请求", self)
layout.addWidget(self.label, alignment=Qt.AlignCenter)
self.button = QPushButton("执行请求", self)
self.button.clicked.connect(self.executeRequest)
layout.addWidget(self.button, alignment=Qt.AlignCenter)
self.progressDialog = ProgressDialog(self)
def executeRequest(self):
url = "https://www.example.com"
self.progressDialog.show()
self.progressDialog.setMessage("正在执行网络请求,请稍候...")
self.requestThread = RequestThread(url)
self.requestThread.finished.connect(self.onRequestFinished)
self.requestThread.start()
def onRequestFinished