@@ -18,19 +18,39 @@ def __init__(self, render_params=None, *args, **options):
1818 render_params = dict (sticky = "ew" , padx = 5 , pady = 2 )
1919 self .__render_params = render_params
2020
21- def render (self , obj = None , render_params = None ):
21+ def param_prepare (self , pack_params , func = "grid" ):
22+ pack_params = pack_params if pack_params else {}
23+ united_pack_params = self .__render_params .copy ()
24+ if func == "pack" :
25+ if "sticky" in united_pack_params :
26+ united_pack_params ["anchor" ] = united_pack_params .pop ("sticky" )
27+ elif func == "place" :
28+ if "sticky" in united_pack_params :
29+ united_pack_params ["anchor" ] = united_pack_params .pop ("sticky" )
30+ united_pack_params .update (pack_params )
31+ print (united_pack_params )
32+ return united_pack_params
33+
34+ def rgrid (self , obj = None , render_params = None ):
2235 """
2336 Perform element creation and rendering in one command. Without creating a variable unnecessarily.
2437 Combines general parameters for the arrangement of elements and parameters for a specific element.
2538 :param obj: Element to rendering
26- :param render_params : Dictionary with element parameters
39+ :param pack_params : Dictionary with element parameters
2740 :return: Rendered element
2841 """
2942 if obj :
30- render_params = render_params if render_params else {}
31- united_pack_params = self .__render_params .copy ()
32- united_pack_params .update (render_params )
33- obj .grid (united_pack_params )
43+ obj .grid (self .param_prepare (render_params ,"grid" ))
44+ return obj
45+
46+ def rpack (self , obj = None , render_params = None ):
47+ if obj :
48+ obj .grid (self .param_prepare (render_params , "pack" ))
49+ return obj
50+
51+ def rplace (self , obj = None , render_params = None ):
52+ if obj :
53+ obj .grid (self .param_prepare (render_params , "place" ))
3454 return obj
3555
3656
@@ -63,7 +83,6 @@ def column(self, column, option=None, **kw):
6383 def insert (self , parent , index , iid = None , ** kw ):
6484 """
6585 Inserts a new row into the Treeview and synchronizes it with the DataFrame.
66-
6786 :param parent: Parent node for Treeview (usually "" for root-level items).
6887 :param index: Position to insert the item.
6988 :param iid: Unique identifier for the row. If None, Treeview generates one.
@@ -185,10 +204,10 @@ def all_checked_update(self, column = 0):
185204
186205 def filter_widget (self , parent ):
187206 widget_frame = ttk .Frame (parent , width = 150 , borderwidth = 1 , relief = "solid" , padding = (2 , 2 ))
188- self .render (tk .Label (widget_frame , text = "Filter by table name:" , font = ("Helvetica" , 9 , "bold" )),
189- dict (row = 0 , column = 0 , pady = 5 ))
207+ self .rgrid (tk .Label (widget_frame , text = "Filter by table name:" , font = ("Helvetica" , 9 , "bold" )),
208+ dict (row = 0 , column = 0 , pady = 5 ))
190209 filter_entry = tk .Entry (widget_frame )
191- self .render (filter_entry , dict (row = 0 , column = 1 , padx = 5 , pady = 5 , sticky = "ew" ))
210+ self .rgrid (filter_entry , dict (row = 0 , column = 1 , padx = 5 , pady = 5 , sticky = "ew" ))
192211
193212 def apply_filter ():
194213 self .filter_by_name (filter_entry .get ())
@@ -204,10 +223,10 @@ def clear_filter():
204223 self .filter_event_evoke ()
205224 self .all_checked_update ()
206225
207- self .render (ttk .Button (widget_frame , text = "Filter" , command = apply_filter ),
208- dict (row = 0 , column = 2 , padx = 5 , pady = 5 ))
209- self .render (ttk .Button (widget_frame , text = "Restore" , command = clear_filter ),
210- dict (row = 0 , column = 3 , padx = 5 , pady = 5 ))
226+ self .rgrid (ttk .Button (widget_frame , text = "Filter" , command = apply_filter ),
227+ dict (row = 0 , column = 2 , padx = 5 , pady = 5 ))
228+ self .rgrid (ttk .Button (widget_frame , text = "Restore" , command = clear_filter ),
229+ dict (row = 0 , column = 3 , padx = 5 , pady = 5 ))
211230 return widget_frame
212231
213232 def checkbox_widget (self , parent ):
@@ -231,16 +250,15 @@ def toggle_all(index: int):
231250 self .svars ["check_all" ][ind ] = tk .IntVar (value = 0 )
232251 box_text = f"Check all { self .heading (col )['text' ] if self .heading (col )['text' ] else col } "
233252 render_params = dict (row = 0 , column = ind , padx = 20 )
234- self .render (ttk .Checkbutton (widget_frame , text = box_text , variable = self .svars ["check_all" ][ind ],
235- command = lambda k = ind : toggle_all (k )), render_params )
253+ self .rgrid (ttk .Checkbutton (widget_frame , text = box_text , variable = self .svars ["check_all" ][ind ],
254+ command = lambda k = ind : toggle_all (k )), render_params )
236255 return widget_frame
237256
238257
239258class GetWidgetsFrame (WidgetsRender , ttk .Frame ):
240259 """
241260 The main class of the program is responsible for constructing the form and interaction of elements
242261 """
243-
244262 def __init__ (self , render_params = None , * args , ** options ):
245263 """
246264 Initialization of the Frame, description of the main elements
@@ -278,27 +296,27 @@ def __init__(self, render_params=None, *args, **options):
278296
279297 def create_widgets (self ):
280298 """Building the main widgets at the beginning of program execution"""
281- self .render (self )
282- self .render (tk .Label (self , text = "MS Access to SQL Export Tool" , font = ("Helvetica" , 14 )),
283- dict (row = 0 , column = 0 , columnspan = 3 , pady = 5 ))
284- self .render (self .label1 , dict (row = 1 , column = 0 , columnspan = 3 ))
285- self .render (tk .Button (self , text = "MS Access File Open" , command = self .btn_openf ),
286- dict (row = 2 , column = 0 , columnspan = 2 ))
287- self .render (tk .Button (self , text = " Exit " , command = self .btn_exit ), dict (row = 2 , column = 2 , columnspan = 2 ))
288- self .render (self .frame1 , dict (row = 4 , column = 0 , columnspan = 3 ))
289- self .render (self .tree , dict (row = 0 , column = 0 , pady = 5 ))
290- self .render (self .scrollbar , dict (row = 0 , column = 3 , sticky = "ns" ))
291- self .render (tk .Button (self , text = " Run! " , command = self .btn_run , font = ("Helvetica" , 12 )),
292- dict (row = 5 , column = 0 , columnspan = 3 , ))
299+ self .rgrid (self )
300+ self .rgrid (tk .Label (self , text = "MS Access to SQL Export Tool" , font = ("Helvetica" , 14 )),
301+ dict (row = 0 , column = 0 , columnspan = 3 , pady = 5 ))
302+ self .rgrid (self .label1 , dict (row = 1 , column = 0 , columnspan = 3 ))
303+ self .rgrid (tk .Button (self , text = "MS Access File Open" , command = self .btn_openf ),
304+ dict (row = 2 , column = 0 , columnspan = 2 ))
305+ self .rgrid (tk .Button (self , text = " Exit " , command = self .btn_exit ), dict (row = 2 , column = 2 , columnspan = 2 ))
306+ self .rgrid (self .frame1 , dict (row = 4 , column = 0 , columnspan = 3 ))
307+ self .rgrid (self .tree , dict (row = 0 , column = 0 , pady = 5 ))
308+ self .rgrid (self .scrollbar , dict (row = 0 , column = 3 , sticky = "ns" ))
309+ self .rgrid (tk .Button (self , text = " Run! " , command = self .btn_run , font = ("Helvetica" , 12 )),
310+ dict (row = 5 , column = 0 , columnspan = 3 , ))
293311
294312 def recreate_widgets (self ):
295- self .render (self .tree , dict (row = 0 , column = 0 , pady = 5 ))
296- self .render (self .scrollbar , dict (row = 0 , column = 3 , sticky = "ns" ))
297- self .render (self .frame0 , dict (row = 3 , column = 0 , columnspan = 3 , sticky = "e" ))
298- self .render (self .tree .filter_widget (self .frame0 ),
299- dict (row = 0 , column = 0 , columnspan = 3 , padx = 5 , pady = 5 , sticky = "ew" ))
300- self .render (self .tree .checkbox_widget (self .frame0 ),
301- dict (row = 4 , column = 0 , columnspan = 3 , padx = 5 , pady = 5 , sticky = "e" ))
313+ self .rgrid (self .tree , dict (row = 0 , column = 0 , pady = 5 ))
314+ self .rgrid (self .scrollbar , dict (row = 0 , column = 3 , sticky = "ns" ))
315+ self .rgrid (self .frame0 , dict (row = 3 , column = 0 , columnspan = 3 , sticky = "e" ))
316+ self .rgrid (self .tree .filter_widget (self .frame0 ),
317+ dict (row = 0 , column = 0 , columnspan = 3 , padx = 5 , pady = 5 , sticky = "ew" ))
318+ self .rgrid (self .tree .checkbox_widget (self .frame0 ),
319+ dict (row = 4 , column = 0 , columnspan = 3 , padx = 5 , pady = 5 , sticky = "e" ))
302320
303321 def make_tree (self ):
304322 self .tree .heading ("table" , text = "Table" )
@@ -338,7 +356,6 @@ def on_toggle_cell(self, event):
338356 """Handles cell clicks to change flags."""
339357 self .update_column_style ()
340358
341-
342359 def btn_run (self ):
343360 """
344361 Implementation of the "Run" button
@@ -374,22 +391,22 @@ def open_link(event):
374391 warning_window .geometry ("345x185" )
375392 warning_window .resizable (False , False )
376393 spad = 7
377- self .render (ttk .Label (warning_window , text = "Access Permission Error" , font = ("Helvetica" , 14 )),
378- dict (row = 0 , column = 0 , pady = spad , columnspan = 3 , sticky = "ns" ))
394+ self .rgrid (ttk .Label (warning_window , text = "Access Permission Error" , font = ("Helvetica" , 14 )),
395+ dict (row = 0 , column = 0 , pady = spad , columnspan = 3 , sticky = "ns" ))
379396 message = (
380397 "The MS Access Export Tool requires access to system tables "
381398 "MSysObjects and MSysRelationships. Please refer to the "
382399 "documentation for steps to grant the necessary permissions."
383400 )
384- self .render (ttk .Label (warning_window , text = message , wraplength = 350 , justify = "center" ),
385- dict (row = 1 , column = 0 , columnspan = 3 , pady = spad ))
401+ self .rgrid (ttk .Label (warning_window , text = message , wraplength = 350 , justify = "center" ),
402+ dict (row = 1 , column = 0 , columnspan = 3 , pady = spad ))
386403 link = ttk .Label (
387404 warning_window , text = "Click here for documentation" , foreground = "blue" , cursor = "hand2"
388405 )
389- self .render (link , dict (row = 2 , column = 0 , columnspan = 3 , pady = spad , sticky = "ns" ))
406+ self .rgrid (link , dict (row = 2 , column = 0 , columnspan = 3 , pady = spad , sticky = "ns" ))
390407 link .bind ("<Button-1>" , open_link )
391- self .render (tk .Button (warning_window , text = " Close " , command = warning_window .destroy ),
392- dict (row = 3 , column = 1 , pady = spad ))
408+ self .rgrid (tk .Button (warning_window , text = " Close " , command = warning_window .destroy ),
409+ dict (row = 3 , column = 1 , pady = spad ))
393410 warning_window .transient ()
394411 warning_window .grab_set ()
395412 warning_window .mainloop ()
0 commit comments