在PyQt中将多个小部件添加到QTableWidget单元格

3

我有一个情况,我想在QTableWidget中添加3个按钮。我可以使用以下代码添加单个按钮。

self.tableWidget = QtGui.QTableWidget()

saveButtonItem = QtGui.QPushButton('Save')
self.tableWidget.setCellWidget(0,4,saveButtonItem)

enter image description here

但我想知道如何添加多个按钮(比如3个)。我的意思是除了“保存”按钮之外,我还想在同一列(“操作”列)中添加其他两个按钮,比如“编辑”和“删除”。

2个回答

8

您可以通过子类化QWidget来创建自己的小部件,其中包含三个按钮:

class EditButtonsWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(EditButtonsWidget,self).__init__(parent)

        # add your buttons
        layout = QtGui.QHBoxLayout()

        # adjust spacings to your needs
        layout.setContentsMargins(0,0,0,0)
        layout.setSpacing(0)

        # add your buttons
        layout.addWidget(QtGui.QPushButton('Save'))
        layout.addWidget(QtGui.QPushButton('Edit'))
        layout.addWidget(QtGui.QPushButton('Delete'))

        self.setLayout(layout)

然后,将此小部件设置为单元格小部件:

self.tableWidget.setCellWidget(0,4, EditButtonsWidget())

5
您需要使用布局小部件将您的小部件添加到其中,然后将布局小部件添加到单元格中。
有几种不同的布局小部件可供使用。 http://doc.qt.io/qt-4.8/layout.html
self.tableWidget = QtGui.QTableWidget()

layout = QtGui.QHBoxLayout()

saveButtonItem = QtGui.QPushButton('Save')
editButtonItem = QtGui.QPushButton('Edit')
layout.addWidget(saveButtonItem)
layout.addWidget(editButtonItem)

cellWidget = QtGui.QWidget()
cellWidget.setLayout(layout)

self.tableWidget.setCellWidget(0, 4, cellWidget)

1
我认为你的意思是 self.tableWidget.setCellWidget(0,4,layout) - Jérôme
我遇到了 TypeError: QTableWidget.setCellWidget(int, int, QWidget): 参数 3 具有意外的类型 'QHBoxLayout' 的错误。 - Rao
好的,我已经仔细阅读了文档。看起来我错了。我会更新答案。你需要先将布局添加到QWidget中。 - Leon
@Leon 谢谢回复。这个方法有效,但是我需要设置布局的 contentMargins 和 spacing 来完美地放置按钮,否则按钮会被挤压。 - Rao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接