1-关于QTableWidget
QTableWidget是Qt中用于显示表格数据的控件。PyQt5中,QTableWidget的继承关系如下:QObject<-QAbstractItemView<-QTableView<- QTableWidget。
-
QObject:是Qt中所有类的基类,提供了对象的基本功能,如信号和槽机制。
-
QAbstractItemView:是一个抽象类,提供了显示和编辑数据模型的功能。它是QTableView和QTreeView的基类,定义了一些通用的方法和信号。
-
QTableView:是一个表格视图类,用于显示二维表格数据。它可以通过设置数据模型来显示和编辑数据,支持单元格的选择、排序和过滤等功能。
-
QTableWidget:是QTableView的子类,是一个完整的表格控件,可以直接使用。它继承了QTableView的所有功能,并提供了更方便的接口来设置和获取表格数据。
-
QTableWidget相比于QTableView,更适合于简单的表格显示和编辑场景,因为它封装了数据模型的创建和管理过程,使得使用起来更加简单和方便。但是,如果需要更高级的自定义功能,如自定义数据模型或表格样式,可以使用QTableView来实现。
QTableWidget的主要操作对象就是每一个单元格,整个表格就是各个单元格构建起来的且通过QTableWidgetItem对象来实现的。本期,我们做一个使用的小界面,加载表格文件到QTableWidget中并实现翻页跳转等功能。
2-Excel文件加载小案例
2.1 UI文件设计
在本案例中,我们想要实现这样的功能,点击文件->open,打开表格类文件,如excel,csv等,并将其内容加载到QTableWidget里面。同时,实现页面翻转,单页显示记录行数,以及指定页面跳转等使用功能。详细的Qt Desinger界面设计见往期。【ui文件后台恢复获取】
2.2 功能实现
① 文件加载【详见前期13. PyQt5从入门到实践系列-13-玩转GUI中的各种对话框-标准对话框QFileDialog】
def open_file(self):
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(self, "Open File", "", "CSV Files (*.csv);;Excel Files (*.xlsx)", options=options)
if file_name:
if file_name.endswith('.csv') or file_name.endswith('.CSV'):
data = pd.read_csv(file_name)
elif file_name.endswith('.xlsx') or file_name.endswith('.xls'):
data = pd.read_excel(file_name)
headers = list(data.columns)
self.set_data(data.values.tolist(), headers)
② 加载文件内容到QTableWidget中
QTableWidget常见方法属性
QTableWidget常见信号
def update_table(self):
start_index = (self.current_page - 1) * self.page_size
end_index = min(start_index + self.page_size, len(self.data))
self.ui.tableWidget.clear()
self.ui.tableWidget.setColumnCount(len(self.headers))
self.ui.tableWidget.setRowCount(end_index - start_index)
self.ui.tableWidget.setHorizontalHeaderLabels(self.headers)
for i, row_data in enumerate(self.data[start_index:end_index]):
for j, cell_data in enumerate(row_data):
item = QTableWidgetItem(str(cell_data))
self.ui.tableWidget.setItem(i, j, item)
self.ui.label_4.setText(str(self.current_page))
self.ui.label.setText(str(self.total_pages))
③ 翻页等功能实现
def go_to_first_page(self):
self.current_page = 1
self.update_table()
def go_to_last_page(self):
self.current_page = self.total_pages
self.update_table()
def prev_page(self):
if self.current_page > 1:
self.current_page -= 1
self.update_table()
def next_page(self):
if self.current_page < self.total_pages:
self.current_page += 1
self.update_table()
def select_page(self):
self.current_page = int(self.ui.lineEdit.text())
self.update_table()
def change_page_size(self, index):
page_size = int(self.ui.comboBox.currentText())
self.page_size = page_size
self.total_pages = (len(self.data) + self.page_size - 1) // self.page_size
self.current_page = 1
self.update_table()
3 总结
以一个简单的小案例,详细实现一个表格文件加载,内容展示功能。更多功能,敬请关注。相关ui文件及代码,后台回复【qtablewidget】