2014-01-29 110 views
1

我有表創建多個選項卡和刪除按鈕的問題。該按鈕應該刪除當前表中的行。我的問題是,它只有當我創建一個以上的新標籤刪除最後創建的錶行。我不能命名錶由於這一事實,我不知道有多少標籤需要。右側按鈕連接與右表

import sys 
from PyQt4 import QtGui, QtCore 

class Fenster(QtGui.QMainWindow): 

    def __init__(self, parent=None): 

     QtGui.QMainWindow.__init__(self, parent) 

     self.resize(300, 300) 

     addButton = QtGui.QPushButton(u"Add Tab") 
     self.connect(addButton, QtCore.SIGNAL("clicked()"), self.addTab) 

     layout = QtGui.QVBoxLayout() 
     layout.addWidget(addButton) 

     self.tab_widget = QtGui.QTabWidget() 
     self.tab_widget.updatesEnabled() 
     widget = QtGui.QWidget() 
     self.tab_widget.addTab(widget, "Tab 1") 
     widget.setLayout(layout) 

     self.setCentralWidget(self.tab_widget) 
     self.show() 


    def addTab(self): 

     contents = QtGui.QWidget() 

     delButton = QtGui.QPushButton(u"Del Row") 
     self.connect(delButton, QtCore.SIGNAL("clicked()"), self.delRow) 

     self.table = QtGui.QTableWidget(5, 2) 

     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.table) 
     layout.addWidget(delButton) 

     self.tab_widget.addTab(contents, "New Tab") 

     contents.setLayout(layout) 

    def delRow(self): 

     self.table.setRowCount(0)   

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = Fenster() 
    window.show() 
    sys.exit(app.exec_())   

回答

1

問題是self.table總是指向您創建的最後一個表小部件。該delRow方法需要知道從一個表刪除,所以它需要的是表的引用。我會建議下面的代碼。在這裏,您的插槽需要一個參數指向要從中刪除的表格。

def addTab(self): 

    contents = QtGui.QWidget() 

    table = QtGui.QTableWidget(5, 2) 
    delButton = QtGui.QPushButton(u"Del Row") 
    delButton.clicked.connect(lambda: self.delRow(table)) 


    layout = QtGui.QVBoxLayout() 
    layout.addWidget(table) 
    layout.addWidget(delButton) 

    self.tab_widget.addTab(contents, "New Tab") 

    contents.setLayout(layout) 

def delRow(self, table): 

    table.setRowCount(0) 

有關此代碼幾件事情:

  • 我已經使用了新樣式的信號/槽將單擊信號連接到插槽(這是更Python)

  • 由於信號預計將連接到需要沒有參數的插槽中,我已經使用lambda包裹你的delRow(table)方法。如果您有沒有碰到過lambda來之前,它基本上是短手寫一行功能。你可以在Python文檔中閱讀它。

0

您可以通過currentChanged()信號跟蹤哪個選項卡處於活動狀態。然後在信號處理程序中設置self.table。