Спасибо, это действительно сработало для меня. Моим первоначальным требованием было назвать этот вид / модель в поле со списком. Я попытался вызвать это, но это не сработало ... Я могу видеть представление внутри поля со списком, но не могу установить ни один из флажков. Я попробовал довольно много возможностей, но не удалось ..
Внесены небольшие изменения в код для вызова из поля со списком.
модифицированный код:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class TestItem():
def __init__(self, name, checked):
self.checked = checked
self.name = name
class StbTreeView(QAbstractListModel):
def __init__(self, args, parent = None):
super(StbTreeView, self).__init__(parent)
self.args = []
for item_name in args:
self.args.append(TestItem(item_name, False))
for item in self.args:
print item.name
#print 'Value of self.args is %s' % self.args
def rowCount(self, parent):
return len(self.args)
def headerData(self, section, orientation, role):
if role == Qt.DisplayRole:
if orientation == Qt.Horizontal:
return QString("Select STB's")
def flags(self, index):
return Qt.ItemIsUserCheckable | Qt.ItemIsEditable | Qt.ItemIsSelectable | Qt.ItemIsEnabled
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
row = index.row()
print self.args[row].name
return self.args[row].name
if role == Qt.CheckStateRole:
row = index.row()
print self.args[row].checked
if self.args[row].checked == False:
return QVariant(Qt.Unchecked)
else:
return QVariant(Qt.Checked)
def setData(self, index, value, role):
if role == Qt.CheckStateRole:
row = index.row()
self.args[row].checked = not self.args[row].checked
return True
class Template(QTreeView):
def __init__(self, parent=None):
super(Template, self).__init__(parent)
self.data = ['STB1', 'STB2', 'STB3', 'STB4', 'STB5', 'STB6', 'STB7', 'STB8']
self.MainUI()
def MainUI(self):
self.model = StbTreeView(self.data)
self.setModel(self.model)
def main():
myapp = QApplication(sys.argv)
temp = Template()
temp.show()
myapp.exec_()
if __name__ == '__main__':
main()
Код из поля со списком:
stb_listview = QComboBox()
view = Template()
stb_listview.setView(view)
stb_listview.setModel(view.model)