2016-07-11 12 views
1

Ich habe eine QTableWidget mit begrenzten Zeilen. Ich möchte, dass Benutzer RETURN drücken können, um eine Zeile einzufügen, wenn sie in der letzten Zeile RETURN drücken und keine Zelle bearbeitet wird (Doppelklick mit der Maus, um in den Bearbeitungsmodus zu gelangen).Wie kann ich feststellen, ob die Zelle von QTableWidget (nicht) bearbeitet wird?

Zelle nicht bearbeitet wird:

enter image description here

Der Code so ist, weiß ich nicht, wie man fillin [aktuelle Zelle nicht bearbeitet]:

class MyTable(QTableWidget): 
    def KeyPressReturn(self, event): 
     if event.key() == Qt.Key_Return: 
      if .currentRow() is the last row] and [current cell is not being edited]: 
       insertRow(last_row_number) 

Antwort

2

Es kann immer nur eine Zelle bearbeitet werden. Sie müssen also nur prüfen, ob die aktuelle Zeile die letzte Zeile ist, und dass die Tabelle state die nicht in edit mode:

if (self.currentRow() == self.rowCount() - 1 and 
     self.state() != QtGui.QAbstractItemView.EditingState): 
     # add a new row 
0
This is the one example to insert the new Column and Row. I think this you exception. 
If your are not expecting this answer, sorry once again. 

import sys 
from PyQt4 import QtGui 
from PyQt4 import QtCore 

class Window (QtGui.QWidget): 
    def __init__(self, parent=None):   

     super(Window, self).__init__(parent) 

     self.tableWidget = QtGui.QTableWidget(self) 
     self.tableWidget.setGeometry(QtCore.QRect(10, 20, 511, 192)) 
     self.tableWidget.setObjectName('tableWidget') 
     self.tableWidget.setColumnCount(0) 
     self.tableWidget.setRowCount(0) 

     self.pushButton = QtGui.QPushButton(self) 
     self.pushButton.setGeometry(QtCore.QRect(20, 220, 101, 23)) 
     self.pushButton.setObjectName('pushButton') 
     self.pushButton.setText('Add') 

     self.pushButton.clicked.connect (self.addItem) 
     self.tableWidget.cellClicked.connect (self.addLine)   


    def addItem (self) : 
     columnCount  = self.tableWidget.columnCount() 
     rowCount  = self.tableWidget.rowCount()   

     item   = QtGui.QTableWidgetItem() 
     self.tableWidget.setVerticalHeaderItem (columnCount+1, item) 

     item   = QtGui.QTableWidgetItem() 
     self.tableWidget.setHorizontalHeaderItem(rowCount+1, item)   

     self.tableWidget.setColumnCount(columnCount+1) 
     self.tableWidget.setRowCount(rowCount+1) 

    def addLine (self) : 
     rowCount  = self.tableWidget.rowCount()   

     item   = QtGui.QTableWidgetItem() 
     self.tableWidget.setHorizontalHeaderItem(rowCount+1, item)    
     self.tableWidget.setRowCount(rowCount+1)  


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    w = Window() 
    w.show() 
    sys.exit(app.exec_()) 
+1

Was passiert, wenn ich ändern Sie den Titel ‚zu sein, Wie kann man wissen, ob QTableWidget Zelle nicht bearbeitet wird '? – minion

+0

Wie das Bild, das ich oben hochgeladen habe, gibt es keine Zeilen mehr unter der Auswahl. Ich möchte, dass Benutzer die RETURN-Taste drücken können, um eine weitere Zeile einzufügen. – minion