2016-06-13 78 views
6

我正在使用QStandardItemModel爲我的qtableview。如何刪除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

爲什麼你傳遞'QtCore.QModelIndex'類removeRow?如果有的話它應該是一個實例,即。 '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()) 

在索引變量中,我們得到所選的行,然後我們刪除該行。

對於我們的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())