컴퓨터/Python

python pyqt5 qlistwidget doubleclick qtablewidget open column color

풍경소리^^ 2022. 6. 3. 17:02

qlistdoubleclickqtableopencolor.py--------------------

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,  QListWidget, QSizePolicy, QStyleFactory
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QColor, QBrush
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 initTableWidget(self, indx):
    #     self.table.clear()
    #     df = self.df_list[indx]
    #     col = len(df.keys())
    #     self.table.setColumnCount(col)
    #     self.table.setHorizontalHeaderLabels(df.keys())
    #     row = len(df.index)
    #     self.table.setRowCount(row)
    #     self.writeTableWidget(indx, df, row, col)
    # def writeTableWidget(self, indx, df, row, col):
    #     for r in range(row):
    #         for c in range(col):
    #             item = QTableWidgetItem(str(df.iloc[r][c]))
    #             self.table.setItem(r, c, item)
    #     self.resizeColumnsToContents()
    # 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;
        }
        QHeaderView::section::Horizontal {
            background-color: rgb(191, 255, 0);
        }
    ''')
    myApp = MyApp()
    myApp.show()
    try:
        sys.exit(app.exec())
    except SystemExit:
        print('Closing Window...')

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

python 새로 시작된 창 이름 인덱스  (0) 2022.06.06
pip freeze 가상환경 쉽게 배포하기  (0) 2022.06.05
python where python  (0) 2022.06.02
pyqt5 qlistwidget table doubleclick excel  (0) 2022.05.31
python qlistwidget  (0) 2022.05.24