2016-06-13 51 views
6

Używam QStandardItemModel dla mojego qtableview.Jak usunąć wiersz/wiersze z qtableview w 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()) 

tutaj gdy próbuję usunąć wybrany wiersz (. Tj model.removeRow()) Ja dostaję błąd „Błąd typu: Argument 1 QAbstractItemModel.removeRow() ma nieprawidłowy typ”.

Szukałem bardzo dużo dla poprawnego sposobu usunięcia wybranego wiersza/wierszy w qtableview pyqt. Nie mogę jednak usunąć wybranego wiersza/wierszy.

Czy możesz udostępnić przykładowy kod do usunięcia wybranego wiersza/wierszy w qtableview pyqt?

+1

Czemu przejściu 'klasę QtCore.QModelIndex' do removeRow? Jeśli cokolwiek, to powinna być instancja, np. 'QtCore.QModelIndex()', ale jest to ustawienie domyślne, najlepiej po prostu usunąć je wszystkie razem. –

+0

@Tim nawet jeśli używam QtCore.QModelIndex() lub usuwam wszystko razem ... Wciąż dostaję ten sam błąd ... –

+0

@tim dzięki za naprawienie błędu literówki. –

Odpowiedz

10

metoda model.removeRow (index.row()) usuwa wybrany wiersz.

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

w zmiennej indeksów otrzymujemy wybrany wiersz, a następnie usuwamy wiersz.

Do usuwania wielu wierszy w naszym wyborze 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())