2016-06-13 19 views
6

Sto usando QStandardItemModel per qtableview.Come eliminare righe/righe da una qtableview in pyqt?

import ui_my_viewlogs 
import os 
from PyQt4 import QtCore, QtGui 

class my_viewlogs(QtGui.QDialog, ui_my_viewlogs.Ui_viewlogs): 
    def __init__(self): 
     super(my_viewlogs, self).__init__() 
     self.setupUi(self) 
     self.model = QtGui.QStandardItemModel() 
     self.tableView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
     self.header_names = ['abc', 'def', 'ghi', 'kjl', 'mno', 'pqr'] 
     self.model.setHorizontalHeaderLabels(self.header_names) 
     self.tableView.verticalHeader().setVisible(False) 
     self.tableView.setShowGrid(False) 
     self.selectionModel = self.tableView.selectionModel() 
     self.tableView.customContextMenuRequested.connect(self.open_menu) 
     self.tableView.setModel(self.model) 
     self.tableView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) 

    def open_menu(self, position): 
     menu = QtGui.QMenu() 
     remove_selected_item_icon = QtGui.QIcon() 
     remove_selected_item_icon.addPixmap(QtGui.QPixmap(":/images  /Images/deleteSelected.png"), QtGui.QIcon.Normal, QtGui.QIcon.On) 
     remove_selected_item = menu.addAction(remove_selected_item_icon, "Remove selected item(s) ") 
     if action == remove_selected_item:   
      model = self.model 
      indices = self.tableView.selectionModel().selectedRows() 
      for index in sorted(indices): 
       model.removeRow(index.row(), QtCore.QModelIndex()) 

qui quando sto cercando di eliminare la riga selezionata (. Cioè model.removeRow()) sto ottenendo un errore "TypeError: argomento 1 di QAbstractItemModel.removeRow() ha un tipo non valido".

Ho cercato molto per il modo corretto di cancellare una riga/righe selezionata in qtableview di pyqt. Tuttavia, non sono in grado di eliminare la riga/le righe selezionate.

Puoi condividere un codice di esempio per eliminare righe/righe selezionate in qtableview di pyqt?

+1

Perché si sta passando la classe 'QtCore.QModelIndex' a removeRow? Se mai dovrebbe essere un'istanza, es. 'QtCore.QModelIndex()', ma questo è il valore predefinito, quindi è meglio rimuoverlo tutto insieme. –

+0

@Tim anche se uso QtCore.QModelIndex() o lo rimuovi tutto ... Ho ancora lo stesso errore .... –

+0

@tim, grazie per aver corretto il mio errore di battitura. –

risposta

10

il metodo model.removeRow (index.row()) rimuove la riga selezionata.

model = self.model 
    indices = self.tableView.selectionModel().selectedRows() 
    for index in sorted(indices): 
     model.removeRow(index.row()) 

nella variabile indici otteniamo la riga selezionata, quindi eliminiamo la riga.

Per cancellare più righe nella nostra selezione di Tableview:

index_list = []               
for model_index in self.tableView.selectionModel().selectedRows():  
    index = QtCore.QPersistentModelIndex(model_index)   
    index_list.append(index)            

for index in index_list:          
    self.model.removeRow(index.row())                
Problemi correlati