diff options
Diffstat (limited to 'python/pyqt/examples3/checklists.py')
-rwxr-xr-x | python/pyqt/examples3/checklists.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/python/pyqt/examples3/checklists.py b/python/pyqt/examples3/checklists.py new file mode 100755 index 00000000..12a3cdb9 --- /dev/null +++ b/python/pyqt/examples3/checklists.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +# vim:tabstop=2:shiftwidth=2:expandtab:cinoptions=(s,U1,m1 +# Copyright (C) 2002 Oleksandr Yakovlyev (yshurik) <yshurik@thekompany.com> + +import sys +from qt import * + +TRUE = 1 +FALSE = 0 + +class CheckLists(QWidget): + def __init__(self, *args): + apply( QWidget.__init__, (self, ) + args ) + + lay = QHBoxLayout(self) + lay.setMargin(5) + + vbox1 = QVBoxLayout(lay) + vbox1.setMargin(5) + + # First child: a Label + vbox1.addWidget(QLabel("Check some items!", self)) + + # Second child: the ListView + self.lv1 = QListView(self) + vbox1.addWidget(self.lv1) + self.lv1.addColumn("Items") + self.lv1.setRootIsDecorated(TRUE) + + # create a list with 4 ListViewItems which will be parent items of other ListViewItems + + parentList = [] + + parentList.append( QListViewItem( self.lv1, "Parent Item 1" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 2" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 3" ) ) + parentList.append( QListViewItem( self.lv1, "Parent Item 4" ) ) + + num = 0 + + self.childList1 = [] + # go through the list of parent items... + for i in range(4): + it = parentList[i] + it.setOpen( TRUE ) + + # ...and create 5 checkable child ListViewItems for each parent item + for j in range(5): + ci = QCheckListItem( it, QString("%1. Child of Parent %2").arg( j ).arg( i ), QCheckListItem.CheckBox ) + self.childList1.append(ci) + + # Create another widget for layouting + tmp1 = QVBoxLayout( lay ) + tmp1.setMargin( 5 ) + + # create a pushbutton + copy1 = QPushButton( " -> ", self ) + tmp1.addWidget( copy1 ) + copy1.setMaximumWidth( copy1.sizeHint().width() ); + # connect the SIGNAL clicked() of the pushbutton with the SLOT copy1to2() + self.connect( copy1, SIGNAL('clicked()'), self.copy1to2 ) + + # another widget for layouting + vbox2 = QVBoxLayout( lay ) + vbox2.setMargin( 5 ) + + # and another label + vbox2.addWidget( QLabel( "Check one item!", self ) ) + + # create the second listview + self.lv2 = QListView( self ) + vbox2.addWidget( self.lv2 ) + self.lv2.addColumn( "Items" ) + self.lv2.setRootIsDecorated( TRUE ) + + # another widget needed for layouting only + tmp2 = QVBoxLayout( lay ) + tmp2.setMargin( 5 ) + + # create another pushbutton... + copy2 = QPushButton( " -> ", self ) + lay.addWidget( copy2 ) + copy2.setMaximumWidth( copy2.sizeHint().width() ) + # ...and connect its clicked() SIGNAL to the copy2to3() SLOT + self.connect( copy2, SIGNAL('clicked()'), self.copy2to3 ) + + tmp3 = QVBoxLayout( lay ) + tmp3.setMargin( 5 ) + + # and create a label which will be at the right of the window + self.label = QLabel( "No Item yet...", self ) + tmp3.addWidget( self.label ) + + def copy1to2(self): + self.lv2.clear() + + # Insert first a controller Item into the second ListView. Always if Radio-ListViewItems + # are inserted into a Listview, the parent item of these MUST be a controller Item! + item = QCheckListItem( self.lv2, "Controller", QCheckListItem.Controller ) + item.setOpen( TRUE ) + + self.listChild2 = [] + for it in self.childList1: + # ...check state of childs, and... + if it.parent() != None: + # ...if the item is checked... + if it.isOn(): + # ...insert a Radio-ListViewItem with the same text into the second ListView + ri = QCheckListItem(item , it.text(0), QCheckListItem.RadioButton) + self.listChild2.append(ri) + + if item.firstChild() != None: + item.firstChild().setOn(TRUE) + + def copy2to3(self): + self.label.setText( "No Item checked" ) + + # iterate through the second ListView... + for it in self.listChild2: + # ...check state of childs, and... + if it.parent() != None: + # ...if the item is checked... + if it.isOn(): + # ...set the text of the item to the label + self.label.setText( it.text( 0 ) ) + +a = QApplication(sys.argv) + +checkLists = CheckLists() +checkLists.resize(700, 400) +checkLists.setCaption("PyQt example - CheckLists") + +a.setMainWidget(checkLists) +checkLists.show() +a.exec_loop() |