2016-06-13 5 views
6

qtableview에 QStandardItemModel을 사용하고 있습니다. 여기pyqt의 qtableview에서 행/행을 삭제하는 방법은 무엇입니까?

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()) 

내가 선택한 행을 삭제하는 것을 시도하고있다. (즉 model.removeRow는()) 나는 오류가 무엇입니까 "형식 오류 : 인수 QAbstractItemModel.removeRow의 1은() 잘못된 유형이 있습니다."

pyqt의 qtableview에서 선택한 행/행을 삭제하는 올바른 방법을 많이 검색했습니다. 그러나 선택한 행/행을 삭제할 수 없습니다.

pyqt의 qtableview에서 선택한 행/행을 삭제하기위한 샘플 코드를 공유해주십시오.

+1

을 왜 removeRow하는'QtCore.QModelIndex' 클래스를 전달하는 :의 tableview의 우리의 선택에서 여러 행을 삭제하는

? 어떤 것이라도 인스턴스 여야합니다. 'QtCore.QModelIndex()'가 기본값이지만, 모든 것을 함께 제거하는 것이 가장 좋습니다. –

+0

@Tim QtCore.QModelIndex()를 사용하거나 모두 제거하더라도 ... 나는 여전히 같은 오류가 발생합니다 .... –

+0

@tim 오타를 잘못 입력 해 주셔서 감사합니다. –

답변

10

메서드 model.removeRow (index.row())는 선택된 행을 제거합니다.

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

인덱스 변수에 선택한 행이 있으면 그 행을 삭제합니다.

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())                
관련 문제