1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| #!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This example shows
how to use QtGui.QComboBox widget.
author: Jan Bodnar
website: zetcode.com
last edited: September 2011
Modif
author: Jean-Patrick Pommier
website: dip4fish.blogspot.com
last edited: March 2012
Given a tree like structure : dic={"p1":{"s1":5,"s2":7},"p2":{"s3":1,"s4":2}}
if p1 is selected in combo1 then combo2 should be filled with: s1, s2
p2 -------------------------------------------------------: s3, s4
"""
import sys
from PyQt4 import QtGui, QtCore
class CascadeMenu(QtGui.QWidget):
def __init__(self,dico):
super(CascadeMenu, self).__init__()
#print dico.keys()
self.initUI(dico)
def initUI(self,dico):
print dico.keys()
self.lbl = QtGui.QLabel("CytoM", self)
#self.fullpath should be first element of menu1 / first elem of menu2
self.fullpath=QtGui.QLabel("path", self)
combo1 = QtGui.QComboBox(self)
for entry in dico.keys():
print entry
combo1.addItem(entry)
#Find visible entry (first element) in combo1
# print "first combo1 item",combo1.itemText(0)
# print "type",type(combo1.itemText(0))
# print str(combo1.itemText(0))
# print "set 1st item in second menu",dico.get(str(combo1.itemText(0)))
combo2=QtGui.QComboBox(self)
for entry in dico.get(str(combo1.itemText(0))):
print entry
combo2.addItem(entry)
combo1.move(50, 50)
combo2.move(100, 50)
#combo1.
self.lbl.move(50, 150)
#Signal -> Slot
combo1.activated[str].connect(self.onActivated)
# let's try that
combo2.activated[str].connect(self.onActivated)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Cascade Menus')
self.show()
def fillNextCombo(self,previouscombo):
pass
def onActivated(self, text):
print text#how 'text' is build?
self.fullpath.setText("should be menu1/menu2")
self.fullpath.adjustSize()
self.lbl.setText(text)
self.lbl.adjustSize()
def main():
print
app = QtGui.QApplication(sys.argv)
dic={"p1":{"s1":5,"s2":7},"p2":{"s3":1,"s4":2}}
ex = CascadeMenu(dic)
sys.exit(app.exec_())
if __name__ == '__main__':
main() |
Partager