Форум сайта python.su
Суть такая. Создаю окно (не суть важно какое, обычное дело: макеты, виджеты), после инициализации элементов запускаю потомок QThread (не принципиально, чем он занят, можно time.sleep(xyz) поставить). Вопрос. Почему окно не отображается до завершения потока?
# ... imports # ... class Thread(QThread): def run(self): time.sleep(5) class MainWindow(QMainWindow): def __init__(self): # ... ui self.thread = Thread() self.thread.start() # ... app = QApplication([]) mainwindow = MainWindow() mainwindow.show() sys.exit(app.exec_())
Офлайн
Твой пример замечательно работает. Окно появляется сразу.
from PyQt4 import QtGui, QtCore import time, sys # ... imports # ... class Thread(QtCore.QThread): def run(self): print "Start" time.sleep(5) print "End" class MainWindow(QtGui.QMainWindow): def __init__(self): super(MainWindow,self).__init__() # ... ui self.thread = Thread() self.thread.start() # ... app = QtGui.QApplication([]) mainwindow = MainWindow() print "Continue" mainwindow.show() sys.exit(app.exec_())
Офлайн
agalen, у меня Python 3 / PySide 1.1. Да, как ни странно, конкретный пример работает. Но мой код — нет. Перепробовал всё, закомментировал всю логику. Приложение все равно ждет, когда завершится процесс.
# весь импорт кроме PySide отключен class StartDatabaseThread(QThread): end = Signal(bool) def __init__(self): super(StartDatabaseThread, self).__init__() def start(self): print('start thread') # логика для теста закомментирована time.sleep(7) self.end.emit(True) print('end thread') class MainWindow(QMainWindow): def __init__(self): # создание интерфейса отключено self.databaseInit() def databaseInit(self): # оставляем только запуск потока self.startDatabaseThread = StartDatabaseThread() self.startDatabaseThread.end.connect(self.databaseStarted) self.databaseStart() def databaseStart(self): self.startDatabaseThread.start() print('thread end?') @Slot(bool) def databaseStarted(self, ok): # signal from thread
Офлайн
Вопрос снят и топик можно удалить! И совет всем друзья! Не работайте сутки на пролет! Вы можете 3 часа убить на поиск ошибочно названного метода. Конечно, у меня переопределен start(), а не run() А собирался уже к шаману идти. Мистика да и только. Случайно взгляд упал на название метода.
Отредактировано Gennady (Окт. 16, 2013 12:05:51)
Офлайн