Запускается главное окно программы, но не отображается, так как мне оно нужно только как родительский элемент.
Создается поток в котором происходят вычисления, и при получении определенного результата из потока генерируется сигнал в основной поток, в основном потоке в это время вызывается метод обработчик сигнала и показывает диалоговое окно с определенным текстом.
Вот код:
from PyQt5.QtWidgets import * from PyQt5.QtCore import * import time import sys class Wgt(QWidget): def __init__(self): self.app = QApplication(sys.argv) super().__init__() lp_thr = LongPollThread(self) lp_thr.mySignal.connect(self.MessageWindow) lp_thr.start() self.app.exec_() def MessageWindow(self, val) wgt = QDialog() lbl_info = QLabel("hello world! The value is " + val) lbl_info.setMaximumWidth(500) lbl_info.setWordWrap(True) form = QFormLayout() form.addRow(lbl_info) wgt.setLayout(form) wgt.setWindowTitle('Hello world') wgt.setBaseSize(300, 300) wgt.exec_() class LongPollThread(QThread): mySignal = pyqtSignal([str]) def __init__(self, par): super(LongPollThread, self).__init__(par) def run(self): vr = [10, 20, 40, 50, 123, 433, 231, 934, 563, 765] for i in range(1, 1000): if i in vr: print(i) self.mySignal.emit(str(i)) time.sleep(15)
При выполнении кода есть несколько проблем:
1. Если закрыть диалоговое окно, то программа завершается полностью, а мне нужно чтобы при закрытии диалогового окна, основной цикл приложения и поток дальше работали.
2. Если появляется несколько диалоговых окон, то последнее появившееся перекрывает все предыдущие, и нет возможности ни сфокусироваться на них, ни закрыть их. Закрыть можно лишь закрыв все окна последовательно, а мне нужно сделать чтобы я мог закрыть любое диалоговое окно(если их несколько открыто в данный момент), то есть чтобы они не были связаны друг с другом.
Подскажите пожалуйста решение, а то уже второй день голову ломаю