2015-04-23 52 views
1

我已经创建了一个窗口,QTableWidget有一个带2个按钮的单元。需要帮助连接类中的连接

按钮是在独立的类中创建的,我从主程序中传递QTableWidget实例。

我无法获取按钮创建类中连接的按钮事件。我的代码片段如下

class Buttons(): 

    def __init__(self,tab): 

     buttonLayout = QtGui.QHBoxLayout() 
     buttonLayout.setContentsMargins(0,0,0,0) 

     self.saveButtonItem = QtGui.QPushButton('Save') 
     self.deleteButtonItem = QtGui.QPushButton('Delete') 

     buttonLayout.addWidget(self.saveButtonItem) 
     buttonLayout.addWidget(self.deleteButtonItem) 

     cellWidget = QtGui.QWidget() 
     cellWidget.setLayout(buttonLayout) 

     tab.insertRow(tab.rowCount()) 

     tab.setCellWidget(tab.rowCount() - 1,0,cellWidget) 

     self.setconncection() 

    def setconncection(self): 

     self.saveButtonItem.clicked.connect(self.btnSaveClicked) 
     self.deleteButtonItem.clicked.connect(self.btnDeleteClicked) 
     print 'connections are set' 

    def btnSaveClicked(self): 

     print 'save clicked' 

    def btnDeleteClicked(self): 

     print 'delete clicked' 

class testing(QtGui.QTableWidget): 

    def __init__(self): 

     super(testing,self).__init__() 

     self.setColumnCount(1) 

     for i in xrange(3): 

      self.r = Buttons(self) 

if __name__ == "__main__" : 

    import sys 

    app = QtGui.QApplication (sys.argv) 

    win = testing() 
    win.show() 

    sys.exit(app.exec_()) 

我在运行时间窗口,如下

enter image description here

回答

1

测试__init__后,参照按钮实例丢失,对象被销毁。 (变量r受影响但未使用。)

保留链接(请参阅下面的代码片段中的最后一行)使其可行。

class testing(QtGui.QTableWidget): 

def __init__(self): 

     super(testing,self).__init__() 

     self.setColumnCount(1) 
     self.setRowCount(1) 

     self.buttons = [] 
     for i in xrange(3): 
      self.buttons.append(Buttons(self)) 
+0

实际上,我正在动态地添加n个行。当时只有最后一行根据你的建议有链接。我已经更新了确切要求的问题。 – Rao

+0

显然,你需要保持一个链接到所有的按钮。答案已更新。 –

+0

完美的,我试着添加所有实例列表作为你的答案,但我没有自我加入。 Yhx的解决方案 – Rao