来自QTableWidgetItem和QWidget的PyQt子类

时间:2014-09-24 23:14:45

标签: python class pyqt pyside qwidget

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

1 个答案:

答案 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

(未经测试)