Форум сайта python.su
В общем пытаюсь написать небольшую программку, суть ее такова:
Запускается главное окно программы, но не отображается, так как мне оно нужно только как родительский элемент.
Создается поток в котором происходят вычисления, и при получении определенного результата из потока генерируется сигнал в основной поток, в основном потоке в это время вызывается метод обработчик сигнала и показывает диалоговое окно с определенным текстом.
Вот код:
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)
Отредактировано likesoft (Фев. 28, 2017 23:50:48)
Офлайн
likesoftВы прислали неполный код, посему непонятно что вы делаете. Обычная практика сделать окно поменьше или запускать свернутым. Главное окно все равно нужно чтобы закрывать программу досрочно.
но не отображается
likesoftТакая сущность уважаемый называется обычное окно. Собственно именно этим обычные окна от диалогов и отличаются.
то есть чтобы они не были связаны друг с другом.
Офлайн
Код полный, но он повергает в уныние… Вот я его нормально переписал, дальше разбирайся сам:
import sys import PySide.QtGui as QtGui import PySide.QtCore as QtCore class MessageWindow(QtGui.QDialog): def __init__(self): QtGui.QDialog.__init__(self) self.lbl_info = QtGui.QLabel(self) self.lbl_info.setMaximumWidth(500) self.lbl_info.setWordWrap(True) self.form = QtGui.QFormLayout() self.form.addRow(self.lbl_info) self.setLayout(self.form) self.setWindowTitle('Hello world') self.setBaseSize(300, 300) def show(self, val): self.lbl_info.setText("hello world! The value is %i"%val) QtGui.QDialog.show(self) class LongPollThread(QtCore.QThread): 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.emit(QtCore.SIGNAL("MySignal(PyObject)"), i) QtCore.QThread.msleep(15000) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) app.setQuitOnLastWindowClosed(False) win = MessageWindow() lp_thr = LongPollThread() lp_thr.connect(QtCore.SIGNAL("MySignal(PyObject)"), win.show) lp_thr.start() sys.exit(app.exec_())
Отредактировано Rodegast (Март 1, 2017 11:38:16)
Офлайн
doza_andКод полный, просто написал его на скорую руку, для примера!
Вы прислали неполный код, посему непонятно что вы делаете
Офлайн
RodegastТо что повергает в уныние не спорю
Код полный, но он повергает в уныние… Вот я его нормально переписал, дальше разбирайся сам:
Отредактировано likesoft (Март 1, 2017 12:05:33)
Офлайн