QTableWidgetItem和QWidget中的PyQt子类



我在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

(未测试)

相关内容

  • 没有找到相关文章

最新更新