2009-05-11 4 views
9

Я хочу показать QListView, где каждый элемент является флажком с некоторой меткой. Флажки должны быть видны в любое время. Один из способов, о котором я могу думать, - использовать пользовательский делегат и QAbstractListModel. Существуют ли более простые способы? Можете ли вы предоставить самый простой фрагмент, который делает это?ListView флажков в PyQt

Заранее спасибо

ответ

10

Если вы пишете свою собственную модель, просто включите Qt.ItemIsUserCheckable флаг в возвращаемом значении метода flags() и убедитесь, что вы вернетесь действительного значения для Qt.CheckStateRole от метода data() ,

Если вы используете QStandardItemModel класс, включает флаг Qt.ItemIsUserCheckable в тех вы передаете setFlags() метод для каждого элемента и установить состояние проверки для Qt.CheckStateRole с методом setData().

В интерактивной сессии Python, введите следующую команду:

from PyQt4.QtGui import * 

model = QStandardItemModel() 
item = QStandardItem("Item") 
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole) 
model.appendRow(item) 

view = QListView() 
view.setModel(model) 
view.show() 
21

Я закончил с использованием методов, предоставляемых David Boddie в списке рассылки PyQt. Вот рабочий фрагмент кода на основе его коды:

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 
from random import randint 


app = QApplication(sys.argv) 

model = QStandardItemModel() 

for n in range(10):     
    item = QStandardItem('Item %s' % randint(1, 100)) 
    check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked 
    item.setCheckState(check) 
    item.setCheckable(True) 
    model.appendRow(item) 


view = QListView() 
view.setModel(model) 

view.show() 
app.exec_() 

Примечания: изменила вызов setData запорной роли в setCheckState и используются setCheckable вместо флагов.

+1

Какие сигналы (если есть) испускаются при переключении такого элемента/флажка? – marcin

+3

, чтобы ответить самому себе, можно использовать 'model.itemChanged', как показано здесь: http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/ – marcin

Смежные вопросы