comp_tree.py
directory : D:\2018_py_proj\TkGridGUI\tkgridgui
Line Count : 117
Line Clip Size : No Clipping
tab_of_notebook_changed Word MatchCase (0)
1
2
3 from __future__ import print_function
4 from __future__ import unicode_literals
5
6 from builtins import str
7 from builtins import object
8 """Generates a list of Component objects in order of tab_label dependence."""
9
10 class CNode( object ):
11
12 def __init__(self, comp_name, tab_label, component):
13
14 self.comp_name = comp_name
15 self.tab_label = tab_label
16 self.component = component
17
18 def __str__(self):
19 return '<%s, %s>'%(self.comp_name, self.tab_label)
20
21 class ComponentTree(object):
22 """Creates a Tree of interdependent Component objects"""
23 def __init__(self):
24
25 self.containerD = {'Main':[]}
26 self.compD = {}
27
28
29 def add_node(self, node):
30
31
32 if node.tab_label not in self.containerD:
33 self.containerD[ node.tab_label ] = []
34
35 self.containerD[ node.tab_label ].append( node )
36 self.compD[ node.comp_name ] = node
37
38 def get_ordered_components(self):
39 """Generates a list of Component objects in order of tab_label dependence."""
40 def get_next( tab_label, resultL ):
41 if tab_label is None:
42 tab_label = "Main"
43
44 compL = sorted( self.containerD[tab_label], key=lambda c: c.comp_name )
45
46
47 resultL.extend( compL )
48
49 nextL = []
50 for c in compL:
51 if c.comp_name in self.containerD:
52 nextL.append( c )
53
54 for c in nextL:
55 get_next(c.comp_name, resultL)
56
57 ansL = []
58 get_next( None, ansL )
59
60
61
62 final_ansL = []
63 tabL = []
64 for cn in ansL:
65
66 if cn.comp_name.startswith('Tab'):
67 c = cn.component
68 tabL.append( (c.row, c.col, c.widget_name, c.user_tkOptionD['text'], cn) )
69 tabL = sorted( tabL )
70 else:
71 if tabL:
72 for _,_,widget_name,_,cn_tab in tabL:
73 final_ansL.append( cn_tab )
74 tabL = []
75
76 final_ansL.append( cn )
77
78 if tabL:
79 for _,_,widget_name,_,cn_tab in tabL:
80 final_ansL.append( cn_tab )
81
82
83 return final_ansL
84
85
86 if __name__ == "__main__":
87
88 ct = ComponentTree()
89 ct.add_node( CNode('Frame_3', 'Main', 'Frame_3_Component') )
90
91 ct.add_node( CNode('Button_4', 'Main', 'Button_4_Component') )
92
93 ct.add_node( CNode('Button_2', 'Main', 'Button_2_Component') )
94 ct.add_node( CNode('Button_3', 'Frame_1', 'Button_3_Component') )
95
96 ct.add_node( CNode('Button_1', 'Main', 'Button_1_Component') )
97
98 ct.add_node( CNode('Frame_1', 'Main', 'Frame_1_Component') )
99 ct.add_node( CNode('Frame_2', 'Main', 'Frame_2_Component') )
100
101 ct.add_node( CNode('Button_5', 'Frame_3', 'Button_5_Component') )
102
103 print('ct.containerD.keys() =',list(ct.containerD.keys()))
104 print('-'*55)
105
106 for key,valL in list(ct.containerD.items()):
107 print(key, [str(val) for val in valL])
108 print('-'*55)
109
110 compL = ct.get_ordered_components()
111 for c in compL:
112 print( c )
113
114
115
116
117