如何在QTableWidget中获取ButtonWidget的行?

2024-10-03 21:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图动态地填充一个QTableWidget(table_proj)

到目前为止,它的工作原理是:桌子已经满了,看起来还不错。 表中项目的代码:

for row in range(nb_row):
   for col in range(nb_col):
       item = QtWidgets.QTableWidgetItem(str(data[row][col]))
       self.table_proj.setItem(row, 0, item)
       self.table_proj.setCellWidget(row, 1, EditButtonWidget())

其中nb_col始终为2,nb_行为len(数据)。数据是获取所有信息的字典

结果如下:

QTableWidget

EditButton的代码如下所示:

class EditButtonWidget(QtWidgets.QWidget):
    
    def __init__(self, parent=None):
        super(EditButtonWidget,self).__init__(parent)

        ###

        self.dw = DockWidget()

        ###Layout###

        self.layout = QtWidgets.QHBoxLayout(self)

        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)

        self.b1 = QtWidgets.QPushButton()
        self.b1.setText('Webseite')
        self.b1.clicked.connect(self.doButtonB1)


        self.b2 = QtWidgets.QPushButton()
        self.b2.setText('Link kopieren')
        self.b2.clicked.connect(self.doButtonB2)

        self.layout.addWidget(self.b1)
        self.layout.addWidget(self.b2)


        self.setLayout(self.layout)


    def doButtonB1(self):

        row = self.dw.table_proj.currentRow()
        print(row)
        

    def doButtonB2(self):
        
        pass

我的问题是,当我点击“Webseite”按钮时,它并没有给我正确的行,而是只收到-1

所以如果有人能给我一个提示,我的错误在哪里,那就太好了


Tags: 代码inselffordeftablecolb2
1条回答
网友
1楼 · 发布于 2024-10-03 21:27:07

只需按照Qt论坛here上的建议,将该行设置为EditButtonWidget类的成员

例如:

class EditButtonWidget(QtWidgets.QWidget):
    
    def __init__(self, row, parent=None):
        super(EditButtonWidget,self).__init__(parent)

        self.row = row

        ### etc ...

    def doButtonB1(self):
        print(self.row)

for row in range(nb_row):
   for col in range(nb_col):
       item = QtWidgets.QTableWidgetItem(str(data[row][col]))
       self.table_proj.setItem(row, 0, item)
       self.table_proj.setCellWidget(row, 1, EditButtonWidget(row))

如果允许用户插入/删除/移动行,则此操作可能不起作用。在这种情况下,您可能需要在qt论坛帖子中使用indexAt,或者将更多信息(在您的情况下是网站url)传递到EditButtonWidget

相关问题 更多 >