2016-06-13 42 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())