@@ -30,6 +30,7 @@ def tabularize():
3030 # load xml data
3131 tree = ET .parse (dVars .graphml_path )
3232 root = tree .getroot ()
33+ ET .register_namespace ('' ,"http://graphml.graphdrawing.org/xmlns" )
3334
3435 # get the column headers
3536 data_types = []
@@ -57,7 +58,12 @@ def tabularize():
5758 x_scrollbar .pack (side = "bottom" , fill = "x" )
5859
5960 # treeview
60- treeview = Treeview (tFrame , show = "headings" , columns = data_types , yscrollcommand = y_scrollbar .set , xscrollcommand = x_scrollbar .set , height = 60 )
61+ treeview = Treeview (tFrame ,
62+ show = "headings" ,
63+ columns = data_types ,
64+ yscrollcommand = y_scrollbar .set ,
65+ xscrollcommand = x_scrollbar .set ,
66+ height = 60 )
6167 treeview .pack (fill = "both" )
6268
6369 # scrollbar configs
@@ -68,7 +74,7 @@ def tabularize():
6874 for col_name in data_types :
6975 treeview .heading (col_name , text = col_name )
7076 data_values = []
71- for type in data_types :
77+ for data_type in data_types :
7278 data_values .append ('N/A' )
7379 # insert nodes and set node values
7480 for node in root .findall ('.//{http://graphml.graphdrawing.org/xmlns}node' ):
@@ -80,21 +86,34 @@ def tabularize():
8086 treeview .set (item = treeview .get_children ()[- 1 ], column = data .get ('key' ), value = data .text )
8187
8288 # create entries for each data_type other than the node's id
83- entries = []
89+ entries = {}
8490 for data_type in data_types :
8591 if data_type != "id" :
8692 label = Label (editFrame , text = f"{ data_type } " )
8793 label .pack ()
8894 entry = Entry (editFrame , width = 40 )
8995 entry .pack (padx = 5 )
90- entries . append ( entry )
96+ entries [ data_type ] = entry
9197
9298 # save entries to the treeview
9399 def save_entries ():
94100 if treeview .selection ()[0 ] is not None :
95- for entry in entries :
96- # index + 1 to avoid the id column
97- treeview .set (item = treeview .selection ()[0 ], column = entries .index (entry )+ 1 , value = entry .get ())
101+ selected_item = treeview .selection ()[0 ]
102+ item_data = treeview .item (selected_item , 'values' )
103+ target_id = item_data [0 ]
104+ target_node = root .find (f'.//{{http://graphml.graphdrawing.org/xmlns}}node[@id="{ target_id } "]' )
105+ for data_type in data_types :
106+ data = target_node .find (f'.//{{http://graphml.graphdrawing.org/xmlns}}data[@key="{ data_type } "]' )
107+ if data is not None :
108+ data .text = entries .get (data_type ).get ()
109+ treeview .set (item = treeview .selection ()[0 ],
110+ column = data_types .index (data_type ),
111+ value = entries .get (data_type ).get ())
112+ tree .write (dVars .graphml_path ,
113+ xml_declaration = True ,
114+ encoding = 'utf-8' ,
115+ method = 'xml' )
116+
98117
99118 # submit button for saving entries
100119 submit = Button (editFrame , text = "Submit" , command = save_entries )
@@ -105,9 +124,8 @@ def on_treeview_select(event):
105124 selected_item = treeview .selection ()[0 ]
106125 item_data = treeview .item (selected_item , 'values' )
107126 for entry in entries :
108- entry .delete (0 , END )
109- # index + 1 to avoid the id column
110- entry .insert (0 , item_data [entries .index (entry )+ 1 ])
127+ entries .get (entry ).delete (0 , END )
128+ entries .get (entry ).insert (0 , item_data [data_types .index (entry )])
111129
112130 treeview .bind ('<<TreeviewSelect>>' , on_treeview_select )
113131
0 commit comments