컴퓨터/Python

pyqt5 qlistwidget table doubleclick excel

풍경소리^^ 2022. 5. 31. 16:02
from msilib.schema import ListView
import re
from ssl import enum_certificates
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, \
                            QHeaderView, QHBoxLayout, QVBoxLayout, QPushButton, QMessageBox, \
                            QFileDialog, QTextBrowser, QListView, QListWidget, QListWidgetItem, \
                            QTableView, QMainWindow, QSizePolicy
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import pandas as pd # pip install pandas
import win32com.client
import os
import warnings
warnings.simplefilter("ignore", UserWarning)
sys.coinit_flags = 2
import pywinauto
import pygetwindow as gw
from PyQt5.QtGui import QTextCursor
class MyApp(QWidget):
# class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.window_width, self.window_height = 700, 500
        self.resize(self.window_width, self.window_height)
        # 수직 박스 배치
        vbox_layout = QVBoxLayout()
        open_btn = QPushButton('엑셀 파일 열기', self)
        open_btn.setFixedSize(200, 30)
        # open_btn.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
        open_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.listwidget = QListWidget(self)
        self.listwidget.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Expanding)     
        vbox_layout.addWidget(open_btn)
        vbox_layout.addWidget(self.listwidget)
        self.table = QTableWidget(self)
        # 수평 박스 배치
        hbox = QHBoxLayout()
        hbox.addLayout(vbox_layout)
        hbox.addWidget(self.table)
        self.setLayout(hbox)
        # 시그널 연결
        open_btn.clicked.connect(self.clickOpenBtn)
        self.listwidget.itemDoubleClicked.connect(self.getItem)
    def getItem(self):
        indx = self.listwidget.currentRow()
        self.loadData(indx)
    def clickOpenBtn(self):
        self.table.clear()
        self.listwidget.clear()
        # file_filter = 'Data file (*.xls *.csv  *.dat);; Excel File (*.xls* *.xls)'
        file_filter = 'Excel File (*.xls* *.xls);;Data file (*.xls *.csv  *.dat)'
        self.file_path, ext = QFileDialog.getOpenFileName(
            parent=self,
            caption='파일 열기',
            directory=os.getcwd(),
            filter=file_filter,
            # initialFilter='Excel File (*.xls *.xlsx)'
            initialFilter='Excel File (*.xls* *.xls)'
        )
        if self.file_path:
            self.df_list = self.sheetData(self.file_path)
            for sheet in self.df_list:
                self.listwidget.addItem(sheet.name)
            self.loadData(0)
            # self.initTableWidget(0)
    def sheetData(self, file_path):
        df_list = []
        with pd.ExcelFile(file_path) as wb:
            for indx, stn in enumerate(wb.sheet_names):
                try:
                    df = pd.read_excel(wb, sheet_name=stn)
                except Exception as e:
                    print('File read error:', e)
                else:
                    df = df.fillna("")
                    df.name = stn
                    df_list.append(df)
        return df_list
    # def loadData(self, file_path):
    def loadData(self, row):
        self.table.clear()
        xl_File = []
        # df = pd.read_excel(self.file_path)
        df = self.df_list[row]
        if df.size == 0:
            return
        df.fillna('',inplace=True)
        self.table.setRowCount(df.shape[0])
        self.table.setColumnCount(df.shape[1])
        self.table.setHorizontalHeaderLabels(df.columns)
        for row in df.iterrows():
            values = row[1]
            for col_index, value in enumerate(values):
                if isinstance(value, (float, int)):
                    value = '{0:0,.0f}'.format(value)
                tableItem = QTableWidgetItem(str(value))
                self.table.setItem(row[0], col_index, tableItem)
        QMessageBox.about(self,'데이터 가져오기','데이터 가져오기 완료')
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet('''
        QWidget {
            font-size: 17px;
        }
    ''')
    myApp = MyApp()
    myApp.show()
    try:
        sys.exit(app.exec())
    except SystemExit:
        print('Closing Window...')

'컴퓨터 > Python' 카테고리의 다른 글

python pyqt5 qlistwidget doubleclick qtablewidget open column color  (0) 2022.06.03
python where python  (0) 2022.06.02
python qlistwidget  (0) 2022.05.24
qlistwidget  (0) 2022.05.24
python qlistview  (0) 2022.05.23