2017-10-11 24 views
0

ユーザーがUIで「編集」をクリックしたときにツリービューで選択された行の2番目の列に表示されるテキストを変更するにはどうすればよいですか?私はpythonとpysideを使用していますが、私はこれを行う方法については明確ではありません。QTreeViewで選択したアイテムの表示テキストを変更する

私は何が起こりたいですか:ユーザーがUIで[編集]をクリックすると、選択したツリービューの列の2番目の列のテキストを変更したいと思います。あなたは単に「こんにちは」や何か簡単なことを言うためにテキストを変更することができます。

​​

import sys 
from PySide import QtGui, QtCore 

class SortModel(QtGui.QSortFilterProxyModel): 

    def __init__(self, *args, **kwargs): 
     super(SortModel, self).__init__(*args, **kwargs) 

    def lessThan(self, left, right): 
     leftData = self.sourceModel().data(left) 
     rightData = self.sourceModel().data(right) 

     if leftData: 
      leftData = leftData.lower() 
     if rightData: 
      rightData = rightData.lower() 

     print('L:', leftData, 'R:', rightData) 
     return leftData < rightData 


class Browser(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Browser, self).__init__(parent) 

     self.initUI() 

    def initUI(self): 
     self.resize(200, 300) 
     self.setWindowTitle('Assets') 
     self.setModal(True) 

     self.results = "" 

     self.uiItems = QtGui.QTreeView() 
     self.uiItems.setAlternatingRowColors(True) 
     self.uiItems.setSortingEnabled(True) 
     self.uiItems.sortByColumn(0, QtCore.Qt.AscendingOrder) 
     self.uiItems.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) 
     self.uiItems.header().setResizeMode(QtGui.QHeaderView.ResizeToContents) 
     self.uiItems.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) 
     self.uiItems.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) 
     self._model = self.create_model(self) 
     self._spmodel = SortModel(self) 
     self._spmodel.setSourceModel(self._model) 
     self._spmodel.setDynamicSortFilter(False) 
     self.uiItems.setModel(self._spmodel) 

     self.uiEdit = QtGui.QPushButton('Edit') 

     grid = QtGui.QGridLayout() 
     grid.setContentsMargins(0, 0, 0, 0) 
     grid.addWidget(self.uiItems, 0, 0) 
     grid.addWidget(self.uiEdit, 1, 0) 
     self.setLayout(grid) 

     self.uiItems.doubleClicked.connect(self.doubleClickedItem) 
     self.show() 

    def doubleClickedItem(self, idx): 
     name = idx.data(role=QtCore.Qt.DisplayRole) 
     model = idx.model() 
     model.setData(idx, 'great', role=QtCore.Qt.DisplayRole) 

    def create_model(self, parent): 

     items = [ 
      'Cookie dough', 
      'Hummus', 
      'Spaghetti', 
      'Dal makhani', 
      'Chocolate whipped cream' 
     ] 

     model = QtGui.QStandardItemModel() 
     model.setHorizontalHeaderLabels(['Name', 'Great']) 

     for item in items: 

      root = [] 
      parentNode = QtGui.QStandardItem(item) 
      root.append(parentNode) 

      # add child row with 2 columns 
      for i in range(3): 
       row = [] 
       col1 = QtGui.QStandardItem() 
       col1.setData('COLUMN 1', role=QtCore.Qt.DisplayRole) 
       row.append(col1) 
       col2 = QtGui.QStandardItem() 
       col2.setData('COLUMN 2', role=QtCore.Qt.DisplayRole) 
       row.append(col2)   
       parentNode.appendRow(row) 

      model.appendRow(root) 

     return model 

    def showEvent(self, event): 
     geom = self.frameGeometry() 
     geom.moveCenter(QtGui.QCursor.pos()) 
     self.setGeometry(geom) 
     super(Browser, self).showEvent(event) 

    def keyPressEvent(self, event): 
     if event.key() == QtCore.Qt.Key_Escape: 
      # self.hide() 
      self.close() 
      event.accept() 
     else: 
      super(Browser, self).keyPressEvent(event) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = Browser() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

ボタンを押したときにGUIで何をしたいですか? – eyllanesc

+0

@eyllanesc更新された説明を投稿する – JokerMartini

答えて

1

、ボタンのclicked信号を接続しmodel.selectedIndexesを経由して選択した項目を取得し、それらを反復し、あなただけのdoubleClickedItem機能のように.column()== 1とそれらを扱います。

を変更して、完全な行ではなく単一の項目のみを選択することもできます。

関連する問題