2016-10-14 15 views
0

私のGuiでは、QStandardItemModelを使用してQTableViewを作成しており、追加の行または列を指定の位置に追加したいと考えています。QTableViewオブジェクトに特定の位置に行を追加する

model.insertRow(idx.row(), QtCore.QModelIndex()) 
AttributeError: 'PySide.QtGui.QItemSelectionModel' object has no attribute 'insertRow' 

答えて

1

テストされていないが、その後のモデル(にinsertRow、insertColumn)の適切なメソッドを呼び出して、モデル
への参照を保持してみてください。

class Output(object): 
    def __init__(self): 
     ''' ''' 
     self.tabs = QtGui.QTabWidget() 
     self.group_box = QtGui.QGroupBox('Example') 

    def run(self): 
     form_layout = QtGui.QFormLayout(self.group_box) 
     self.tabs.addTab(self.__genTable(),"Tab 1") 
     self.tabs.addTab(self.__genTable(),"Tab 2") 

     form_layout.addWidget(self.tabs) 

     return self.group_box 

    def __genTable(self): 
     table_view = QtGui.QTableView() 

     table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
     table_view.customContextMenuRequested.connect(self.__openMenu) 

     table_view.setSelectionBehavior(QtGui.QTableView.SelectItems) 
     table_view.setModel(QtGui.QStandardItemModel(4, 2)) 

     return table_view 

    def __openMenu(self, position): 
     menu = QtGui.QMenu() 
     sub_menu_row = QtGui.QMenu("Row") 
     menu.addMenu(sub_menu_row) 
     addRowBelowAction = sub_menu_row.addAction("add Row below") 
     action = menu.exec_(QtGui.QCursor.pos()) 

     if action == addRowBelowAction: 
      idx = self.tabs.currentWidget().selectionModel().currentIndex() 
      for i in range(self.tabs.count()): 
       model = self.tabs.widget(i).selectionModel() 
       model.insertRow(idx.row(), QtCore.QModelIndex()) 

は、残念ながら、私は次のエラーを取得します。
これらの方法の効果は、この図から明らかです。 例えば:私の場合は

table_view = QtGui.QTableView() 
table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
table_view.setSelectionBehavior(QtGui.QTableView.SelectItems) 
model = QtGui.QStandardItemModel(4, 2) 
table_view.setModel(model) 
model.insertRow(2, QtCore.QModelIndex()) 
+0

私はモデルを行うことができない= QtGui.QStandardItemModelは(4、2)、というし、私はtable_viewから何とかモデルを取得する必要があります。あなたはそれをする方法を知っていますか? – Eagle

+0

おそらく、 'selectionModel()'ではなく 'model()'を得たいでしょう。例えば。 'myTableView.model()' – dave

関連する問題