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 |