【发布时间】:2014-11-19 14:28:15
【问题描述】:
我在 Pyqt 中制作了一个 QTableWidget,但遇到了一些烦人的问题。
我需要在我的表格中使用小部件来实现其功能,因此我使用 setCellWidget 将它们添加到表格中。但是,小部件没有 QTableWidgetItem 提供的相同方法(尤其是在表格中的选择方面)。
我想知道是否可以对这两个项目进行子类化,这样我就可以同时拥有这两个项目的方法,以及如何将其添加到表格中。
类似:
class TableItem(QtGui.QTableWidgetItem, QtGui.QWidget):
def __init__(self, parent=None):
super(TableItem, self).__init__(parent)
self.check = QtGui.QCheckBox()
self.label = QtGui.QLabel('Some Text')
self.h_box = QtGui.QHBoxLayout()
self.h_box.addWidget(self.check)
self.h_box.addWidget(self.label)
然后以某种方式将它作为 TableWidgetItem 添加到我的表格中,以便它显示小部件并且还具有可用的选择方法。
这里有什么想法吗?
供参考: setCellWidget:http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidget.html#setCellWidget QWidget:(很容易找到,我不能发布超过 2 个链接) - 没有适合表格的好方法 QTableWidgetItem:http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidgetitem.html#type 使用 isSelected 和 setSelected(setCellWidget 中使用的小部件无法使用方法。
要在单元格中返回小部件,您可以使用 table.cellWidget(row, column) 然后在其上使用您的小部件方法。但是因为 setSelected 和 isSelected 不是小部件的方法,所以您无法检查选择。我希望将两者合并在一起以允许两者
--基本上我需要知道如何让我的类在我调用它以使用 setItem 添加到表时“返回”正确的类型
【问题讨论】:
-
我是否正确理解您希望 QTableWidget 中的项目本身是小部件,而不是通常用于制作 QTableWidgetItems 的普通 QStrings、ints 等?
-
正确。 QTableWidget 中有一个方法 setCellWidget ,您可以在其中使用表格中的小部件 - 这太棒了,而且效果很好。唯一的问题是你没有得到 QTableWidgetItem 附带的好方法,比如选择状态等。我会更新问题以链接到每个
-
我觉得你的继承方式基本正确。究竟是什么不适合这种方法?
-
哦,我认为只是
super()可能行不通。除此之外,我认为它可能会起作用。 -
我认为 super 应该可以工作,py docs 说它允许多项初始化。但我两种方式都试过了。我不确定如何添加它......基本上,如何从类中获取“返回值”。因为如果我运行它,上面的代码然后说 test = TableItem()
.setItem(row, column, test) 它不会添加,我会收到错误(通常是非常非描述性的错误。如果我向其中添加一个函数这将返回 hbox,然后 setItem 将不起作用,因为 hbox 是一个小部件。我不确定如何让类作为 tablewidgetitem 返回的最后一步。像 repr 之类的东西?
标签: python class pyqt pyside qwidget