我在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#setCellWidgetQWidget:(很容易找到,我不能发布超过2个链接)-哪个没有表的好方法QTableWidgetItem:http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidgetitem.html#type带有isSelected和setSelected(方法不可从setCellWidget.中使用的小部件中获得
要返回单元格中的小部件,可以使用table.cellWidget(行、列),然后在上面使用小部件方法。但是由于setSelected和isSelected不是小部件的方法,所以您无法检查选择。我希望将这两个分类在一起,以允许两个
--基本上,当我调用类以使用setItem添加到表中时,我需要知道如何让类"返回"正确的类型
我不确定你想做什么,但你可以"注入"一个方法,比如:
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
(未测试)