pip install pandas ;
pip install pyqt5;
pip install pyqt5-tools;
编写 pyqt5_read_etx.py 如下
python
# -*- coding: utf-8 -*-
""" pandas 读取 Excel文件或 .etx 电子表格文件,显示在 QTableWidget 中 """
import os
import sys
import numpy as np
import pandas as pd
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem
from PyQt5.uic import loadUi
class EtxReader(QMainWindow):
def __init__(self):
super(EtxReader, self).__init__()
loadUi("readEtx.ui", self) # Load the UI file
self.file_path = "" # To store the file path
self.df = pd.DataFrame() # To store the etx data
self.browse_btn.clicked.connect(self.browse_file)
self.read_btn.clicked.connect(self.read_etx)
def browse_file(self):
""" Open a file dialog to browse etx files.
"""
file_name, _ = QFileDialog.getOpenFileName(self, "Open etx File", "",
"etx File(*.etx);;xlsx File(*.xlsx)")
if file_name:
self.file_path = file_name
self.file_path_line_edit.setText(self.file_path)
def read_etx(self):
""" Read the etx file using Pandas and display the data in the table widget.
"""
if not self.file_path:
QMessageBox.critical(self, "Error", "Please select an etx file to read.")
return
try:
self.df = pd.read_excel(self.file_path)
self.table_widget.setRowCount(self.df.shape[0])
self.table_widget.setColumnCount(self.df.shape[1])
self.table_widget.setHorizontalHeaderLabels(map(str,self.df.columns))
#print(list(map(str,self.df.columns)))
print('shape:', self.df.shape)
for i in range(self.df.shape[0]):
for j in range(self.df.shape[1]):
v = self.df.iloc[i, j]
#print(v)
if v is None or v is np.nan:
item = QTableWidgetItem('')
else:
item = QTableWidgetItem(str(v))
self.table_widget.setItem(i, j, item)
except Exception as e:
QMessageBox.critical(self, "Error", f"Error: {e}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = EtxReader()
window.show()
sys.exit(app.exec_())
编写 readEtx.ui 如下
XML
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ExcelReader</class>
<widget class="QMainWindow" name="ExcelReader">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Excel Reader</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="file_path_label">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>111</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Excel File:</string>
</property>
</widget>
<widget class="QLineEdit" name="file_path_line_edit">
<property name="geometry">
<rect>
<x>110</x>
<y>20</y>
<width>431</width>
<height>22</height>
</rect>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="browse_btn">
<property name="geometry">
<rect>
<x>570</x>
<y>20</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Browse</string>
</property>
</widget>
<widget class="QPushButton" name="read_btn">
<property name="geometry">
<rect>
<x>670</x>
<y>20</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Read</string>
</property>
</widget>
<widget class="QTableWidget" name="table_widget">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>781</width>
<height>501</height>
</rect>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
运行 python pyqt5_read_etx.py