Форум сайта python.su
Есть qtreeview в котором много элементов и нужно отфитровать и оставить там только элементы с одной (заданной) картиной.
Можно это сделать или нет?
from PyQt4 import Qt def clickme(): model.item(0).setIcon(icons[0]) app = Qt.QApplication([]) icons = (Qt.QIcon('icons/1455634123_tick_green.png'), Qt.QIcon('icons/1455634138_tick_red.png')) w = Qt.QWidget() item = Qt.QStandardItem('text') item.setIcon(Qt.QIcon(icons[1])) item1 = Qt.QStandardItem('text1') item1.setIcon(icons[0]) model = Qt.QStandardItemModel() model.setHorizontalHeaderLabels([u'Заголовок']) model.appendRow(item) model.appendRow(item1) tree = Qt.QTreeView(w) tree.setModel(model) btn = Qt.QPushButton("Click me",w) Qt.QObject.connect(btn,Qt.SIGNAL("clicked()"),clickme) grid = Qt.QGridLayout(w) grid.setMargin(0) grid.addWidget(tree,0,0) grid.addWidget(btn,1,0) w.move(0,0) w.show() app.exec_()
Отредактировано marina932 (Фев. 27, 2016 22:44:12)
Офлайн
#!/usr/bin/env python # -*- coding:utf8 -*- from PyQt4 import Qt def select(): count = model.rowCount() rootindex = model.index(0,0) index = box.currentIndex() for i in xrange(count): tree.setRowHidden(i,model.index(i,0,rootindex),False) if index == 1: for i in xrange(count): icon = model.item(i).icon() if icon.cacheKey() != iconkeys[0] : tree.setRowHidden(i,model.index(i,0,rootindex),True) elif index == 2: for i in xrange(count): icon = model.item(i).icon() if icon.cacheKey() != iconkeys[1] : tree.setRowHidden(i,model.index(i,0,rootindex),True) app = Qt.QApplication([]) model = Qt.QStandardItemModel() model.setHorizontalHeaderLabels([u'Заголовок']) icons = (Qt.QIcon('red.png'),Qt.QIcon('blue.png')) iconkeys = (icons[0].cacheKey(),icons[1].cacheKey()) for i in xrange(5): s = 'text' + str(i) item = Qt.QStandardItem(s) if i%2 : item.setIcon(icons[0]) else: item.setIcon(icons[1]) model.appendRow(item) w = Qt.QWidget() tree = Qt.QTreeView(w) tree.setModel(model) tree.setSortingEnabled(True) box = Qt.QComboBox(w) box.addItems([u'Все',u'Красный',u'Синий']) box.setItemIcon(1,icons[0]) box.setItemIcon(2,icons[1]) box.currentIndexChanged.connect(select) grid = Qt.QGridLayout(w) grid.setMargin(0) grid.addWidget(tree,0,0,1,2) grid.addWidget(box,1,0,1,1) w.move(0,0) w.show() app.exec_()
Отредактировано vic57 (Фев. 28, 2016 21:02:27)
Офлайн