pyqt main winow зависает при открытии другого окна - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над приложением PyQt, которое показывает файлы CSV в другом окне, используя pandas

Пользователь нажимает кнопку добавления и выбирает файл CSV с помощью FileDialog.Затем pandas прочитает фрейм данных, который будет передан в другое окно, где будет отображаться контент.

main.py

from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QFileDialog
from text_viewer import TextViewer
import sys
import pandas as pnd
from threading import Thread

class MainUI(QMainWindow):

    def __init__(self):
        super(MainUI, self).__init__()
        self.datas = []
        uic.loadUi('main.ui', self)
        self.model = QStandardItemModel()
        self.listView.setModel(self.model)
        self.load_btn.clicked.connect(self.add_btn)
        self.show()

    def add_btn(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        allowed_extensions = "CSV Files (*.csv)"
        files = QFileDialog.getOpenFileNames(self, "Choose Data File To Load", "", allowed_extensions, options=options)
        if files:
            thread = Thread(target=self.add, args=(files,))
            thread.start()

    def add(self, files):
        for file in files[0]:
            try:

                if file.endswith(".csv"):
                    df = pnd.read_csv(file)
                    viewer = TextViewer(df)

                if df is not None:
                    self.datas.append(df)
                    item = QStandardItem(file)
                    self.model.appendRow(item)


            except Exception as e:
                print(str(e))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainUI()
    sys.exit(app.exec_())

text_viewer.py

from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow


class TextViewer(QMainWindow):

    def __init__(self, df):
        super(TextViewer, self).__init__()
        self.df = df
        uic.loadUi('text_viewer.ui', self)
        self.show() # at this point the main window freezes 

Когда я выбираю файл, создается новый экземпляр TextViewer, и в этот момент основное окно останавливается.Если я не звоню, покажите, ничего не произойдет, но если я сделаю это, приложение зависнет, пока я не закрою его вручную из диспетчера задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...