pip install pandas ;
pip install pyqt5;
pip install pyqt5-tools;
编写 pyqt5_read_etx.py 如下
- # -*- 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 file
- """
- file_name, _ = QFileDialog.getOpenFileName(self, "Open etx File", "",
- "xlsx File(*.xlsx);;etx File(*.etx)")
- if file_name:
- self.file_path = file_name
- self.file_path_line_edit.setText(self.file_path)
-
- def read_etx(self):
- """ Read .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(type(v), v)
- if (v is None) or (v is np.nan):
- item = QTableWidgetItem('')
- elif type(v) is str:
- item = QTableWidgetItem(v)
- elif type(v) is int or type(v) is np.int64:
- item = QTableWidgetItem("%d" %v)
- elif type(v) is float or type(v) is np.float64:
- item = QTableWidgetItem("%.4f" %v)
- else:
- #print(type(v), v)
- 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 如下
- "1.0" encoding="UTF-8"?>
- <ui version="4.0">
- <class>ExcelReaderclass>
- <widget class="QMainWindow" name="ExcelReader">
- <property name="geometry">
- <rect>
- <x>0x>
- <y>0y>
- <width>800width>
- <height>600height>
- rect>
- property>
- <property name="windowTitle">
- <string>Excel Readerstring>
- property>
- <widget class="QWidget" name="centralwidget">
- <widget class="QLabel" name="file_path_label">
- <property name="geometry">
- <rect>
- <x>10x>
- <y>20y>
- <width>111width>
- <height>16height>
- rect>
- property>
- <property name="text">
- <string>Excel File:string>
- property>
- widget>
- <widget class="QLineEdit" name="file_path_line_edit">
- <property name="geometry">
- <rect>
- <x>110x>
- <y>20y>
- <width>431width>
- <height>22height>
- rect>
- property>
- <property name="readOnly">
- <bool>truebool>
- property>
- widget>
- <widget class="QPushButton" name="browse_btn">
- <property name="geometry">
- <rect>
- <x>570x>
- <y>20y>
- <width>75width>
- <height>23height>
- rect>
- property>
- <property name="text">
- <string>Browsestring>
- property>
- widget>
- <widget class="QPushButton" name="read_btn">
- <property name="geometry">
- <rect>
- <x>670x>
- <y>20y>
- <width>75width>
- <height>23height>
- rect>
- property>
- <property name="text">
- <string>Readstring>
- property>
- widget>
- <widget class="QTableWidget" name="table_widget">
- <property name="geometry">
- <rect>
- <x>10x>
- <y>60y>
- <width>781width>
- <height>501height>
- rect>
- property>
- widget>
- widget>
- <widget class="QMenuBar" name="menubar">
- <property name="geometry">
- <rect>
- <x>0x>
- <y>0y>
- <width>800width>
- <height>26height>
- rect>
- property>
- widget>
- <widget class="QStatusBar" name="statusbar"/>
- widget>
- <resources/>
- <connections/>
- ui>
运行 python pyqt5_read_etx.py