04-PyQt5实践-QTableWidget全网最佳实践-文件加载-翻页/跳转功能

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】

 

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值