Skip to content

Commit ee4e689

Browse files
authored
Merge pull request #21 from whellcome/1.2-dev
class WidgetsRender methods pack & place implemented
2 parents 1b74bc0 + 56874ee commit ee4e689

File tree

1 file changed

+61
-44
lines changed

1 file changed

+61
-44
lines changed

code/export-msaccess-sql.py

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

239258
class 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

Comments
 (0)