2014-09-24 102 views
1

我在Pyqt中制作了一个QTableWidget,并且遇到了一个恼人的打嗝。QTableWidgetItem和QWidget的PyQt子类

我需要在我的表中使用小部件的功能,所以即时使用setCellWidget将它们添加到表中。然而,小部件没有与QTableWidgetItem的do相同的方法(特别是关于表中的选择)。

我想知道是否有可能做一些东西的两个项目,所以我可以有两个方法,以及我如何将dd到桌子上。

喜欢的东西:

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(方法不你可以使用table.cellWidget(row,column),然后使用你的小部件方法,但是使用setSelected和isSelected方法来创建一个小部件,你不能检查选择,我希望将这两个子集合在一起以允许

--Basically我需要知道如何让我的班“回归”正确的类型时,我把它添加到表setItem

+0

我是否正确地说明白你希望QTableWidget中的项目本身是widgets,而不是通常用于生成QTableWidgetItems的常规QStrings,ints等等? – ballsatballsdotballs 2014-09-24 23:23:57

+0

正确。 QTableWidget中有一个setCellWidget方法,您可以在表中使用小部件 - 这非常棒,效果很好。唯一的问题是你没有得到像QTableWidgetItem一样的选择状态等很好的方法。我更新问题链接到每个 – Alex 2014-09-25 00:05:34

+0

我认为你的继承方法基本上是正确的。究竟哪种方法不适用于这种方法? – Fenikso 2014-09-25 08:45:09

回答

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 

(未测试)

相关问题