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

Posted

技术标签:

【中文标题】在 PyQt 中将多个小部件添加到 QTableWidget 单元格【英文标题】:Adding Multiple Widgets to QTableWidget Cell in PyQt 【发布时间】:2015-04-21 06:21:40 【问题描述】:

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

self.tableWidget = QtGui.QTableWidget()

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

但我想知道如何添加多个(比如说 3 个)按钮。我的意思是与保存按钮一起,我想在同一列中添加其他 2 个按钮,例如编辑、删除(操作)

【问题讨论】:

【参考方案1】:

您可以简单地创建自己的小部件,其中包含三个按钮,例如通过子类化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)

然后,将此小部件设置为 cellwidget:

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

【讨论】:

【参考方案2】:

您使用布局小部件将小部件添加到其中,然后将布局小部件添加到单元格。

您可以使用几种不同的方法。 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)

【讨论】:

我想你的意思是self.tableWidget.setCellWidget(0,4,layout) iam getting TypeError: QTableWidget.setCellWidget(int, int, QWidget): argument 3 has unexpected type 'QHBoxLayout' 好的,我通读了文档。好像我弄错了。我会更新答案。您需要先将布局添加到 QWidget @Leon 谢谢回复。它有效,但我需要设置布局 contentMargins 和间距以完美设置按钮。否则按钮会被挤压。

以上是关于在 PyQt 中将多个小部件添加到 QTableWidget 单元格的主要内容,如果未能解决你的问题,请参考以下文章

从不同类添加的小部件内的 PyQt5 停止计时器

PyQt5 - 动态添加小部件到布局

带有多个 qlineedit 小部件的 pyqt 上下文菜单

在 PyQt5/Pyside2 中动态添加小部件到流布局

多个文件中的 PyQt 小部件

尽管更新了小部件,但 Pyqt5 更新的小部件未添加到布局中