Я работаю над приложением 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, и в этот момент основное окно останавливается.Если я не звоню, покажите, ничего не произойдет, но если я сделаю это, приложение зависнет, пока я не закрою его вручную из диспетчера задач.