Source code for QWCheckList

#!@PYTHON@

"""
Created on 2017-07-27

@author: Mikhail Dubrovin

QListView/QWidget QWCheckList - works on the dictionary of checked items

Usage::
    from graphqt.QWCheckList import QWCheckList, print_dic
    import sys

    d = {'CSPAD1':True, 'CSPAD2x21':False, 'pNCCD1':True, 'Opal1':False}

    app = QtGui.QApplication(sys.argv)
    w = QWCheckList(parent=None, dic_item_state=d)
    w.setGeometry(100, 100, 200, 300)
    w.setWindowTitle('Test Check List')
    w.show()
    app.exec_()

    print_dic(d)
"""
#------------------------------
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt
#------------------------------

#class QWCheckList(QtGui.QWidget):
[docs]class QWCheckList(QtGui.QListView): """Gets dict of item for checkbox GUI in format {'CSPAD1':True, 'CSPAD2x21':False, 'pNCCD1':True, 'Opal1':False} and modify this list in gui. """ def __init__(self, parent=None, dic_item_state={}) : #QtGui.QWidget.__init__(self, parent) QtGui.QListView.__init__(self, parent) self.set_model(dic_item_state) #self.set_test_model() #self.view.setDragDropMode(QtGui.QAbstractItemView.InternalMove) #self.view.expandAll() #self.view.setAnimated(True) #self.connect(self.selectionModel(), QtCore.SIGNAL('currentChanged(QModelIndex,QModelIndex)'),self.itemSelected) #self.doubleClicked.connect(self.someMethod2) # This works #self.expanded.connect(self.itemExpanded) #self.collapsed.connect(self.itemCollapsed) self.set_style() def set_style(self): #self.setMinimumSize(100,400) self.setMinimumWidth(150) self.setMaximumWidth(500) self.setMinimumHeight(200) self.setContentsMargins(QtCore.QMargins(-9,-9,-9,-9)) def set_test_model(self) : from random import randint model = QtGui.QStandardItemModel() for n in range(20): item = QtGui.QStandardItem('Item %02d' % n) #randint(1, 100)) check = Qt.Checked if randint(0, 4) < 2 : check = Qt.Checked else : check = Qt.Unchecked item.setCheckState(check) item.setCheckable(True) model.appendRow(item) self.setModel(model) def get_dic_item_state(self) : return self.dic_item_state def set_dic_item_state(self, dic_item_state) : self.set_model(dic_item_state) def set_model(self, dic_item_state) : self.dic_item_state = dic_item_state #print 'self.model()', self.model() if self.model() is not None : self.model().itemChanged.disconnect(self.on_item_changed) #del self.model() model = QtGui.QStandardItemModel() for k,v in self.dic_item_state.iteritems() : item = QtGui.QStandardItem('%s' % k) item.setCheckState(Qt.Checked if v else Qt.Unchecked) item.setCheckable(True) #item.setSelectable(True) model.appendRow(item) self.setModel(model) self.model().itemChanged.connect(self.on_item_changed) def on_clicked_test(self, item): print "Clicked on item row:'%d' col:%d" % (item.row(), item.column()) def on_item_changed(self, item): state = ['UNCHECKED', 'TRISTATE', 'CHECKED'][item.checkState()] item_txt = str(item.text()) #print "Item with text '%s', is at state %s" % (item_txt, state) self.dic_item_state[item_txt] = [False, True, True][item.checkState()] def on_item_changed_test(self, item): state = ['UNCHECKED', 'TRISTATE', 'CHECKED'][item.checkState()] item_txt = str(item.text()) print "Item with text '%s', is at state %s" % (item_txt, state) print_dic(self.dic_item_state) if item_txt == 'Opal1' : d = {'CSPAD2':True, 'CSPAD2x22':False, 'pNCCD2':False, 'Opal2':True, 'Opal3':True} self.set_model(d) if item_txt == 'Opal2' : d = {'CSPAD1':True, 'CSPAD2x21':False, 'pNCCD1':True, 'Opal1':False} self.set_model(d)
#----------------------------- def print_dic(d, fmt='%s : %s') : for k,v in d.iteritems() : print fmt % (k.ljust(32),str(v).ljust(32)) #----------------------------- if __name__ == "__main__" : import sys d = {'CSPAD1':True, 'CSPAD2x21':False, 'pNCCD1':True, 'Opal1':False} #d = {} app = QtGui.QApplication(sys.argv) w = QWCheckList(parent=None, dic_item_state=d) w.setGeometry(100, 100, 200, 300) w.setWindowTitle('Test Check List') #w.model().itemChanged.connect(w.on_item_changed_test) # on checkbox #w.clicked.connect(w.on_clicked_test) # on item line w.show() app.exec_() print_dic(d) #-----------------------------