Добрый день.
Уже который день пытаюсь понять причину закрытия окна при запуске потока, который никак с этим окном не связан (как мне кажется).
Использую Python 3.5.4 и PyQt 5.6. В главном модуле мы создаём окно с таблицей (tableview). В таблице одна запись. При двойном клике ЛКМ по этой записи открывается пустое окно. Через 5 секунд после запуска программы стартует поток:
main.py
from PyQt5 import QtWidgets, uic import os import sys from threads import LoadDocs from tables import LoadData from viewwindow import ViewDocs class MainWindow(QtWidgets.QWidget): def __init__(self): super().__init__() # Главное окно self.main_window = uic.loadUi(os.path.join("main.ui"), self) self.main_window.setWindowTitle("Тест") # Поток self.load_docs_thread = LoadDocs() self.load_docs_thread.started.connect(self.load_docs_thread_started) self.load_docs_thread.finished.connect(self.load_docs_thread_finished) # Таблица self.main_window.tableView.doubleClicked.connect(self.open_window) value = [("1", "2", "3", "4", "5", "6")] table_model = LoadData(value) self.main_window.tableView.setModel(table_model) self.main_window.tableView.resizeColumnsToContents() self.main_window.tableView.horizontalHeader().setStretchLastSection(True) self.main_window.tableView.setColumnHidden(0, True) # Отображение self.main_window.show() def open_window(self): ViewDocs() def load_docs_thread_started(self): print("load_docs_thread_started") def load_docs_thread_finished(self): print("load_docs_thread_finished") if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow() sys.exit(app.exec_())
viewwindow.py
import os from PyQt5 import QtCore, QtWidgets, uic class ViewDocs(QtWidgets.QWidget): def __init__(self): super().__init__() self.view_window = uic.loadUi(os.path.join("viewwindow.ui"), self) self.view_window.setWindowTitle("Окно") self.view_window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) self.view_window.show()
threads.py
from PyQt5 import QtCore import requests class LoadDocs(QtCore.QThread): def __init__(self, parent=None): QtCore.QThread.__init__(self, parent) self.basictimer = QtCore.QBasicTimer() self.basictimer.start(5000, self) def run(self): response = requests.get("http://" + "ya.ru") if response.status_code == 200: print("1") def timerEvent(self, QTimerEvent): self.start()
То есть суть проблемы заключается в том, что я запускаю программу и сразу открываю окно дабл кликом по строке таблицы и как только срабатывает поток (проверяет, доступен ли сайт) это окно закрывается, остаётся только главное окно. Подскажите, пожалуйста, что в таком случае нужно сделать, чтобы работа потока не влияло на окно?
Обновлено! Если создать окно не в Designer, а в самом питоне, то проблема решается:
viewwindow.py
class ViewDocs(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__() QtWidgets.QWidget.__init__(self, parent)