2016-09-01 8 views
1

QTreeViewで、PySideを使用しているため、ユーザーがクリックして点線のフォーカスボックスを表示できる小さな空のボックス領域が表示されるのはなぜですか?どうすれば削除できますか?私は、最初の列に単純なチェックボックスが必要です。QTreeViewのチェックボックスに空のフォーカスがある

enter image description here

コード:

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(1, 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(True) 
     self.uiItems.setModel(self._spmodel) 

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

     self.setLayout(grid) 
     self.update_asset_model() 
     self.uiItems.doubleClicked.connect(self.doubleClickedItem) 
     self.show() 

    def doubleClickedItem(self, idx): 
     if not idx.isValid(): 
      return 
     print idx.parent(), idx.parent().isValid() 
     model = idx.model() 
     print model.index(idx.row(), 0, parent=idx.parent()).data() 

    def create_model(self, parent): 
     model = QtGui.QStandardItemModel() 
     model.setHorizontalHeaderLabels([]) 
     return model 

    def add_row_item(self, model, name, _type): 
     model.insertRow(0) 
     model.setData(model.index(0, 0), '') 
     model.setData(model.index(0, 0), QtCore.Qt.Checked, 
      role = QtCore.Qt.CheckStateRole 
     ) 
     model.setData(model.index(0, 1), name) 
     model.setData(model.index(0, 2), _type) 
     model.setData(model.index(0, 2), 
      QtGui.QBrush(QtGui.QColor(200, 140, 70, 255)), 
      role=QtCore.Qt.ForegroundRole 
     ) 

    def update_asset_model(self): 
     model = self.uiItems.model().sourceModel() 
     model.clear() 
     model.setHorizontalHeaderLabels(['', 'Name', "Output"]) 

     items = { 
      'Doug' : "C:/fire/cache_.jpeg", 
      'Mike' : "C:/smoke/cache_.tga", 
      'Kevin' : "C:/water/cache_.tif", 
      'Curt' : "C:/steam/cache_.jpg", 
      'Corey' : "C:/blood/cache_.png" 
     } 

     for n in items.keys(): 
      self.add_row_item(model, n, items[n]) 

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

答えて

1

あなたは空の文字列にそのテキストを設定しているため、最初の列がフォーカス矩形を示しています。ですから、そのようなことが起こらないようにするには、テキストをすべて設定しないでください。

代わりに、ビューは、列ごとに個別に行全体のためのフォーカス矩形を表示するのではなく、作ることができます:コードで、私はその列のデフォルトのテキストを設定しています

self.uiItems.setAllColumnsShowFocus(True) 
+0

? – JokerMartini

+0

@JokerMartini。 'add_row_item'の2行目です。 – ekhumoro

+0

助けてくれてありがとう – JokerMartini

関連する問題