Вот статья в блоге, в которой представлены несколько методов и примеры кода для отображения окна сообщения в PyQt, когда задача активна.
В PyQt отображение окна сообщения во время активной задачи может быть полезным способом предоставления уведомлений или сбора данных пользователя, не прерывая его рабочий процесс. В этой статье мы рассмотрим различные методы достижения этой функциональности, сопровождаемые примерами кода.
Методы:
- Использование QTimer:
Один из подходов — использовать класс QTimer PyQt для периодической проверки статуса задачи и отображения соответствующего окна сообщения. Вот пример:
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget
from PyQt5.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Message Box Example")
# ...
# Start the task
self.startTask()
def startTask(self):
# Start your task here
# ...
# Create a QTimer
self.timer = QTimer()
self.timer.timeout.connect(self.checkTaskStatus)
self.timer.start(1000) # Check every 1 second
def checkTaskStatus(self):
# Check the task status
if task_is_active:
QMessageBox.information(self, "Task Status", "Task is still active.")
# Stop the timer if the task is completed
else:
self.timer.stop()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
- Использование QThread:
Другой метод — создать отдельный поток для задачи и использовать сигналы для связи с основным потоком для отображения окна сообщения. Вот пример:
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget
from PyQt5.QtCore import QThread, pyqtSignal
class WorkerThread(QThread):
task_status = pyqtSignal(bool)
def run(self):
# Perform your task here
# ...
# Emit the task status signal
self.task_status.emit(task_is_active)
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Message Box Example")
# ...
# Start the task
self.startTask()
def startTask(self):
self.thread = WorkerThread()
self.thread.task_status.connect(self.showTaskStatus)
self.thread.start()
def showTaskStatus(self, is_active):
if is_active:
QMessageBox.information(self, "Task Status", "Task is still active.")
else:
self.thread.quit()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
- Использование QProgressDialog:
Класс QProgressDialog предоставляет встроенный диалог прогресса с дополнительным окном сообщения. Вы можете использовать это для отображения статуса задачи, пока задача активна. Вот пример:
from PyQt5.QtWidgets import QApplication, QMessageBox, QWidget, QProgressDialog
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Message Box Example")
# ...
# Start the task
self.startTask()
def startTask(self):
progress_dialog = QProgressDialog("Task is active...", None, 0, 0, self)
progress_dialog.setWindowTitle("Task Status")
progress_dialog.setCancelButton(None) # Remove the cancel button
progress_dialog.setWindowModality(True) # Make the dialog modal
progress_dialog.show()
# Start your task here
# ...
# Close the dialog when the task is completed
progress_dialog.close()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
В этой статье мы рассмотрели несколько способов отображения окна сообщения, когда задача активна в PyQt. Мы рассмотрели использование QTimer, QThread и QProgressDialog, приведя примеры кода для каждого подхода. Реализуя эти методы, вы можете обеспечить удобство работы пользователей, одновременно информируя их о ходе выполнения задачи.