pyqt给QTableView添加按钮控件

      我们经常会在表格的最后添加一些操作,比如增删改查下载等等,我们可以这样在QTableView中添加按钮:

1、创建一个按钮类:

class MyButtonDelegate(QItemDelegate):
    def __init__(self, parent=None):
        super(MyButtonDelegate, self).__init__(parent)

    def paint(self, painter, option, index):
        if not self.parent().indexWidget(index):
            button_read = QPushButton(
                self.tr('Excel'),
                self.parent(),
                clicked=self.parent().downloadButtonClicked
            )
            button_read.index = [index.row(), index.column()]
            h_box_layout = QHBoxLayout()
            h_box_layout.addWidget(button_read)
            h_box_layout.setContentsMargins(0, 0, 0, 0)
            h_box_layout.setAlignment(Qt.AlignCenter)
            widget = QWidget()
            widget.setLayout(h_box_layout)
            self.parent().setIndexWidget(
                index,
                widget
            )

2、定义一个表格类:

class MyTableView(QTableView):
    def __init__(self, parent=None, btn_col: int = 5):
        super(MyTableView, self).__init__(parent)
        self.setItemDelegateForColumn(btn_col, MyButtonDelegate(self))

        # 下载

    def downloadButtonClicked(self):
        print("你好")

这里的self.setItemDelegateForColumn(btn_col, MyButtonDelegate(self))就是你要添加按钮位置的代码,我这里是添加到表格的第六列

3、将这段代码根据需求添加到你自己写的代码里,我这里下边还有一个类,就不详细写了,如果还有什么疑问可以问我:

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
当使用 QTableView 时,QSqlQueryModel 是一个常用的模型类,它可以从数据库中检索数据并将其显示在 QTableView 中。下面是一个示例,演示如何在 QTableView 中实现分页功能: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QAbstractItemView, QHeaderView, QWidget, QHBoxLayout, QPushButton, QLabel, QLineEdit from PyQt5.QtCore import Qt from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建数据库连接 self.db = QSqlDatabase.addDatabase("QSQLITE") self.db.setDatabaseName("database.db") self.db.open() # 创建查询模型 self.model = QSqlQueryModel() self.model.setQuery("SELECT * FROM your_table") # 设置分页参数 self.page_size = 10 self.current_page = 1 self.total_pages = (self.model.rowCount() + self.page_size - 1) // self.page_size # 创建分页件 self.page_label = QLabel() self.page_label.setAlignment(Qt.AlignCenter) self.prev_button = QPushButton("上一页") self.next_button = QPushButton("下一页") # 创建表格视图 self.table_view = QTableView() self.table_view.setModel(self.model) self.table_view.setSelectionBehavior(QAbstractItemView.SelectRows) self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) # 创建布局 layout = QHBoxLayout() layout.addWidget(self.prev_button) layout.addWidget(self.page_label) layout.addWidget(self.next_button) widget = QWidget() widget.setLayout(layout) main_layout = QVBoxLayout() main_layout.addWidget(self.table_view) main_layout.addWidget(widget) central_widget = QWidget() central_widget.setLayout(main_layout) self.setCentralWidget(central_widget) # 连接槽函数 self.prev_button.clicked.connect(self.previous_page) self.next_button.clicked.connect(self.next_page) # 更新分页标签 self.update_page_label() def update_page_label(self): self.page_label.setText(f"第 {self.current_page}/{self.total_pages} 页") def previous_page(self): if self.current_page > 1: self.current_page -= 1 self.update_model() def next_page(self): if self.current_page < self.total_pages: self.current_page += 1 self.update_model() def update_model(self): offset = (self.current_page - 1) * self.page_size query = f"SELECT * FROM your_table LIMIT {self.page_size} OFFSET {offset}" self.model.setQuery(query) self.update_page_label() if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在上述示例中,我们使用 QTableView 和 QSqlQueryModel 来显示数据库中的数据。我们还创建了两个按钮来实现分页,并使用 QLabel 显示当前页数信息。你可以根据需要修改示例中的表名和数据库文件名。 希望这个示例能对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值