PyQt5 QTableWidget添加多个按钮,并确定其位置

话不多说,先上正确的代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class NewTableWidget(QtWidgets.QWidget):

    def __init__(self,lst):
        super().__init__()
        self.resize(800,300)
        self.hlayout = QtWidgets.QHBoxLayout(self)
        self.lst = lst
        self.newTableWidget()

    # 表格控件
    def newTableWidget(self):
        label7 = QtWidgets.QLabel('已添加:')
        self.tableWidget = QtWidgets.QTableWidget()
        self.tableWidget.setRowCount(3)
        self.tableWidget.setColumnCount(len(self.lst))
        self.tableWidget.setHorizontalHeaderLabels(self.lst)
        self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)  # 使列表自适应宽度
        self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)    # 设置tablewidget不可编辑
        self.tableWidget.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)      # 设置tablewidget不可选中
        for i in range(3):
            self.tableWidget.setCellWidget(i, len(self.lst) - 1, self.buttonForRow())  # 在最后一个单元格中加入修改、删除按钮
        self.hlayout.addWidget(label7)
        self.hlayout.addWidget(self.tableWidget)

    def buttonForRow(self):
        widget = QtWidgets.QWidget()
        # 修改
        self.updateBtn = QtWidgets.QPushButton('修改')
        self.updateBtn.setStyleSheet(''' text-align : center;
                                          background-color : NavajoWhite;
                                          height : 30px;
                                          border-style: outset;
                                          font : 13px  ''')

        # 删除
        self.deleteBtn = QtWidgets.QPushButton('删除')
        self.deleteBtn.setStyleSheet(''' text-align : center;
                                    background-color : LightCoral;
                                    height : 30px;
                                    border-style: outset;
                                    font : 13px; ''')
        self.deleteBtn.clicked.connect(self.DeleteButton)

        hLayout = QtWidgets.QHBoxLayout()
        hLayout.addWidget(self.updateBtn)
        hLayout.addWidget(self.deleteBtn)
        hLayout.setContentsMargins(5, 2, 5, 2)
        widget.setLayout(hLayout)
        return widget

    def DeleteButton(self):
        button = self.sender()
        if button:
        	# 确定位置的时候这里是关键
            row = self.tableWidget.indexAt(button.parent().pos()).row() 
            #self.tableWidget.removeRow(row)
            print(row)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    lst = ['年份', '上报情况', '上报时间', '附件上传', '操作']
    win = NewTableWidget(lst)
    app.setWindowIcon(QtGui.QIcon('img/system.png'))
    win.show()
    sys.exit(app.exec_())

运行结果:
在这里插入图片描述
分析:
确定位置的关键语句主要是row = self.tableWidget.indexAt(button.parent().pos()).row() -------①,网上好多语句都是row = self.tableWidget.indexAt(button.pos()).row() --------- ②,先说一下这个语句,这个语句是在qtablewidget中添加单个按钮的时候来确定其位置,点击button释放信号可以被接收到。但是当我们要添加两个甚至多个按钮时,我相信很多人都是将其合并到一个widget,然后使用qtablewidget的setCellwidget将多个按钮加入到单元格中。此时如果在使用语句②定位的话,定位到按钮的位置是按钮在父控件(widget)中的位置,这样,按钮的行列值就永远都是一样的,0或者其他值。如果使用语句①来确定其父控件的位置,这样就能得到正确的行列值,可以对相应的行和列进行修改

  • 36
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在PyQt中实现点击按钮弹出表格的功能,你可以使用QTableWidget来创建和显示表格,并使用QPushButton来实现按钮点击事件。 下面是一个简单的示例代码,演示如何点击按钮弹出表格: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QTableWidget, QTableWidgetItem class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("表格示例") # 创建按钮和表格 self.button = QPushButton("弹出表格") self.button.clicked.connect(self.showTable) self.table = QTableWidget() # 在主窗口中布局按钮和表格 layout = QVBoxLayout() layout.addWidget(self.button) layout.addWidget(self.table) centralWidget = QWidget() centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) def showTable(self): # 清空表格内容 self.table.clear() # 设置表格行列数 self.table.setRowCount(5) self.table.setColumnCount(3) # 填充表格数据 for row in range(5): for col in range(3): item = QTableWidgetItem(f"({row}, {col})") self.table.setItem(row, col, item) if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 在这个示例中,我们定义了一个MainWindow类作为主窗口,并创建了一个QPushButton和一个QTableWidget。当按钮被点击时,我们调用`showTable()`方法来弹出表格。 在`showTable()`方法中,我们首先清空表格内容,然后设置表格的行数和列数。接下来,我们使用`setItem()`方法在表格的每个单元格中填充数据。 你可以根据需要修改表格的行数、列数和数据填充方式。希望这能帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值