2014-09-24 67 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 

(未測試)

相關問題