我在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 with isSelected和setSelected(方法不能从setCellWidget中使用的小部件中获取。
要在单元格中返回窗口小部件,您可以使用table.cellWidget(row,column),然后使用您的窗口小部件方法。但是因为小部件没有setSelected和isSelected方法,你无法检查选择。我希望将两者结合在一起以允许两者
- 基本上我需要知道如何让我的类“返回”正确的类型,当我调用它来添加到具有setItem的表
答案 0 :(得分:0)
我不确定你想做什么,但你可以"注射"像这样的方法:
class TableWidgetItem(QtGui.QTableWidgetItem):
def __init__(self, parent=None):
QtGui.QTableWidgetItem.__init__(self)
def doSomething(self):
print "doing something in TableWidgetItem"
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self)
tableWidgetItem = TableWidgetItem()
widget = Widget()
def widgetFunction(self):
tableWidgetItem.doSomething()
# as an instance method
settatr(widget, "widgetFunction", MethodType(widgetFunction, widget, type(widget)))
# or as a class method
settatr(widget, "widgetFunction", widgetFunction)
然后你可以:
>>>widget.widgetFunction()
doing something in TableWidgetItem
(未经测试)