Update Widgets to be able to use grid
This commit is contained in:
@@ -38,6 +38,7 @@ def bottom_frame(self, parent, args=None):
|
||||
self,
|
||||
"Count",
|
||||
None,
|
||||
None,
|
||||
{"label": {"side": LEFT}, "spinbox": {"side": RIGHT}}
|
||||
)
|
||||
self.widgets[key].pack(side=LEFT)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from tkinter import ttk, StringVar, Entry, Frame, Label, N, E, W, LEFT, RIGHT, X
|
||||
from tkinter import ttk, StringVar, Entry, Frame, Label, N, E, W, LEFT, RIGHT, X, VERTICAL, Y
|
||||
import gui.widgets as widgets
|
||||
import json
|
||||
import os
|
||||
@@ -7,6 +7,16 @@ def custom_page(top,parent):
|
||||
# Custom Item Pool
|
||||
self = ttk.Frame(parent)
|
||||
|
||||
def create_list_frame(parent, framename):
|
||||
parent.frames[framename] = Frame(parent)
|
||||
parent.frames[framename].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
parent.frames[framename].thisRow = 0
|
||||
parent.frames[framename].thisCol = 0
|
||||
|
||||
def create_vertical_rule(num=1):
|
||||
for i in range(0,num):
|
||||
ttk.Separator(self, orient=VERTICAL).pack(side=LEFT, anchor=N, fill=Y)
|
||||
|
||||
def validation(P):
|
||||
if str.isdigit(P) or P == "":
|
||||
return True
|
||||
@@ -19,51 +29,45 @@ def custom_page(top,parent):
|
||||
|
||||
# Custom Item Pool option sections
|
||||
self.frames = {}
|
||||
self.frames["itemList1"] = Frame(self)
|
||||
self.frames["itemList1"].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
self.frames["itemList2"] = Frame(self)
|
||||
self.frames["itemList2"].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
self.frames["itemList3"] = Frame(self)
|
||||
self.frames["itemList3"].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
self.frames["itemList4"] = Frame(self)
|
||||
self.frames["itemList4"].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
self.frames["itemList5"] = Frame(self)
|
||||
self.frames["itemList5"].pack(side=LEFT, padx=(0,0), anchor=N)
|
||||
create_list_frame(self,"itemList1")
|
||||
create_vertical_rule(2)
|
||||
create_list_frame(self,"itemList2")
|
||||
create_vertical_rule(2)
|
||||
create_list_frame(self,"itemList3")
|
||||
create_vertical_rule(2)
|
||||
create_list_frame(self,"itemList4")
|
||||
create_vertical_rule(2)
|
||||
create_list_frame(self,"itemList5")
|
||||
|
||||
with open(os.path.join("resources","app","gui","custom","overview","itemList1.json")) as items:
|
||||
myDict = json.load(items)
|
||||
dictWidgets = widgets.make_widgets_from_dict(self, myDict, self.frames["itemList1"])
|
||||
for key in dictWidgets:
|
||||
self.customWidgets[key] = dictWidgets[key]
|
||||
self.customWidgets[key].pack()
|
||||
|
||||
with open(os.path.join("resources","app","gui","custom","overview","itemList2.json")) as items:
|
||||
myDict = json.load(items)
|
||||
dictWidgets = widgets.make_widgets_from_dict(self, myDict, self.frames["itemList2"])
|
||||
for key in dictWidgets:
|
||||
self.customWidgets[key] = dictWidgets[key]
|
||||
self.customWidgets[key].pack()
|
||||
|
||||
with open(os.path.join("resources","app","gui","custom","overview","itemList3.json")) as items:
|
||||
myDict = json.load(items)
|
||||
dictWidgets = widgets.make_widgets_from_dict(self, myDict, self.frames["itemList3"])
|
||||
for key in dictWidgets:
|
||||
self.customWidgets[key] = dictWidgets[key]
|
||||
self.customWidgets[key].pack()
|
||||
|
||||
with open(os.path.join("resources","app","gui","custom","overview","itemList4.json")) as items:
|
||||
myDict = json.load(items)
|
||||
dictWidgets = widgets.make_widgets_from_dict(self, myDict, self.frames["itemList4"])
|
||||
for key in dictWidgets:
|
||||
self.customWidgets[key] = dictWidgets[key]
|
||||
self.customWidgets[key].pack()
|
||||
|
||||
with open(os.path.join("resources","app","gui","custom","overview","itemList5.json")) as items:
|
||||
myDict = json.load(items)
|
||||
dictWidgets = widgets.make_widgets_from_dict(self, myDict, self.frames["itemList5"])
|
||||
for key in dictWidgets:
|
||||
self.customWidgets[key] = dictWidgets[key]
|
||||
self.customWidgets[key].pack()
|
||||
|
||||
keys = list(self.customWidgets.keys())
|
||||
for i in range(0, len(keys)):
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
from tkinter import Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, RIGHT
|
||||
from tkinter import Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, RIGHT, X
|
||||
|
||||
class Empty():
|
||||
pass
|
||||
|
||||
class mySpinbox(Spinbox):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -13,17 +16,17 @@ class mySpinbox(Spinbox):
|
||||
elif event.num == 4 or event.delta == 120:
|
||||
self.invoke('buttonup')
|
||||
|
||||
def make_checkbox(self, parent, label, storageVar, packAttrs):
|
||||
def make_checkbox(self, parent, label, storageVar, manager, managerAttrs):
|
||||
self = Frame(parent, name="checkframe-" + label.lower())
|
||||
self.storageVar = storageVar
|
||||
self.checkbox = Checkbutton(self, text=label, variable=self.storageVar, name="checkbox-" + label.lower())
|
||||
if packAttrs is not None:
|
||||
self.checkbox.pack(packAttrs)
|
||||
if managerAttrs is not None:
|
||||
self.checkbox.pack(managerAttrs)
|
||||
else:
|
||||
self.checkbox.pack()
|
||||
return self
|
||||
|
||||
def make_selectbox(self, parent, label, options, storageVar, packAttrs):
|
||||
def make_selectbox(self, parent, label, options, storageVar, manager, managerAttrs):
|
||||
def change_storage(*args):
|
||||
self.storageVar.set(options[self.labelVar.get()])
|
||||
def change_selected(*args):
|
||||
@@ -38,61 +41,68 @@ def make_selectbox(self, parent, label, options, storageVar, packAttrs):
|
||||
self.labelVar = StringVar()
|
||||
self.labelVar.trace_add("write",change_storage)
|
||||
self.label = Label(self, text=label)
|
||||
if packAttrs is not None and "label" in packAttrs:
|
||||
self.label.pack(packAttrs["label"])
|
||||
if managerAttrs is not None and "label" in managerAttrs:
|
||||
self.label.pack(managerAttrs["label"])
|
||||
else:
|
||||
self.label.pack()
|
||||
self.selectbox = OptionMenu(self, self.labelVar, *options.keys())
|
||||
self.selectbox.config(width=20)
|
||||
self.labelVar.set(packAttrs["default"] if "default" in packAttrs else list(options.keys())[0])
|
||||
if packAttrs is not None and "selectbox" in packAttrs:
|
||||
self.selectbox.pack(packAttrs["selectbox"])
|
||||
self.labelVar.set(managerAttrs["default"] if "default" in managerAttrs else list(options.keys())[0])
|
||||
if managerAttrs is not None and "selectbox" in managerAttrs:
|
||||
self.selectbox.pack(managerAttrs["selectbox"])
|
||||
else:
|
||||
self.selectbox.pack()
|
||||
return self
|
||||
|
||||
def make_spinbox(self, parent, label, storageVar, packAttrs):
|
||||
def make_spinbox(self, parent, label, storageVar, manager, managerAttrs):
|
||||
self = Frame(parent, name="spinframe-" + label.lower())
|
||||
self.storageVar = storageVar
|
||||
self.label = Label(self, text=label)
|
||||
if packAttrs is not None and "label" in packAttrs:
|
||||
self.label.pack(packAttrs["label"])
|
||||
if managerAttrs is not None and "label" in managerAttrs:
|
||||
self.label.pack(managerAttrs["label"])
|
||||
else:
|
||||
self.label.pack()
|
||||
fromNum = 1
|
||||
toNum = 100
|
||||
if "spinbox" in packAttrs:
|
||||
if "from" in packAttrs:
|
||||
fromNum = packAttrs["spinbox"]["from"]
|
||||
if "to" in packAttrs:
|
||||
toNum = packAttrs["spinbox"]["to"]
|
||||
if "spinbox" in managerAttrs:
|
||||
if "from" in managerAttrs:
|
||||
fromNum = managerAttrs["spinbox"]["from"]
|
||||
if "to" in managerAttrs:
|
||||
toNum = managerAttrs["spinbox"]["to"]
|
||||
self.spinbox = mySpinbox(self, from_=fromNum, to=toNum, width=5, textvariable=self.storageVar, name="spinbox-" + label.lower())
|
||||
if packAttrs is not None and "spinbox" in packAttrs:
|
||||
self.spinbox.pack(packAttrs["spinbox"])
|
||||
if managerAttrs is not None and "spinbox" in managerAttrs:
|
||||
self.spinbox.pack(managerAttrs["spinbox"])
|
||||
else:
|
||||
self.spinbox.pack()
|
||||
return self
|
||||
|
||||
def make_textbox(self, parent, label, storageVar, packAttrs):
|
||||
self = Frame(parent)
|
||||
self.storageVar = storageVar
|
||||
self.label = Label(self, text=label)
|
||||
if packAttrs is not None and "label" in packAttrs:
|
||||
self.label.pack(packAttrs["label"])
|
||||
else:
|
||||
self.label.pack()
|
||||
self.textbox = Entry(self, justify=RIGHT, textvariable=self.storageVar, width=3)
|
||||
if "default" in packAttrs:
|
||||
self.storageVar.set(packAttrs["default"])
|
||||
if packAttrs is not None and "textbox" in packAttrs:
|
||||
self.textbox.pack(packAttrs["textbox"])
|
||||
else:
|
||||
self.textbox.pack()
|
||||
return self
|
||||
def make_textbox(self, parent, label, storageVar, manager, managerAttrs):
|
||||
widget = Empty()
|
||||
widget.storageVar = storageVar
|
||||
widget.label = Label(parent, text=label)
|
||||
widget.textbox = Entry(parent, justify=RIGHT, textvariable=widget.storageVar, width=3)
|
||||
if "default" in managerAttrs:
|
||||
widget.storageVar.set(managerAttrs["default"])
|
||||
|
||||
# grid
|
||||
if manager == "grid":
|
||||
widget.label.grid(managerAttrs["label"] if managerAttrs is not None and "label" in managerAttrs else None, row=parent.thisRow, column=parent.thisCol)
|
||||
parent.thisCol += 1
|
||||
widget.textbox.grid(managerAttrs["textbox"] if managerAttrs is not None and "textbox" in managerAttrs else None, row=parent.thisRow, column=parent.thisCol)
|
||||
parent.thisRow += 1
|
||||
parent.thisCol = 0
|
||||
|
||||
# pack
|
||||
elif manager == "pack":
|
||||
widget.label.pack(managerAttrs["label"] if managerAttrs is not None and "label" in managerAttrs else None)
|
||||
widget.textbox.pack(managerAttrs["textbox"] if managerAttrs is not None and "textbox" in managerAttrs else None)
|
||||
return widget
|
||||
|
||||
|
||||
def make_widget(self, type, parent, label, storageVar=None, packAttrs=dict(), options=None):
|
||||
def make_widget(self, type, parent, label, storageVar=None, manager=None, managerAttrs=dict(), options=None):
|
||||
widget = None
|
||||
if manager is None:
|
||||
manager = "pack"
|
||||
thisStorageVar = storageVar
|
||||
if isinstance(storageVar,str):
|
||||
if storageVar == "int" or storageVar == "integer":
|
||||
@@ -103,27 +113,28 @@ def make_widget(self, type, parent, label, storageVar=None, packAttrs=dict(), op
|
||||
if type == "checkbox":
|
||||
if thisStorageVar is None:
|
||||
thisStorageVar = IntVar()
|
||||
widget = make_checkbox(self, parent, label, thisStorageVar, packAttrs)
|
||||
widget = make_checkbox(self, parent, label, thisStorageVar, manager, managerAttrs)
|
||||
elif type == "selectbox":
|
||||
if thisStorageVar is None:
|
||||
thisStorageVar = StringVar()
|
||||
widget = make_selectbox(self, parent, label, options, thisStorageVar, packAttrs)
|
||||
widget = make_selectbox(self, parent, label, options, thisStorageVar, manager, managerAttrs)
|
||||
elif type == "spinbox":
|
||||
if thisStorageVar is None:
|
||||
thisStorageVar = StringVar()
|
||||
widget = make_spinbox(self, parent, label, thisStorageVar, packAttrs)
|
||||
widget = make_spinbox(self, parent, label, thisStorageVar, manager, managerAttrs)
|
||||
elif type == "textbox":
|
||||
if thisStorageVar is None:
|
||||
thisStorageVar = StringVar()
|
||||
widget = make_textbox(self, parent, label, thisStorageVar, packAttrs)
|
||||
widget = make_textbox(self, parent, label, thisStorageVar, manager, managerAttrs)
|
||||
return widget
|
||||
|
||||
def make_widget_from_dict(self, defn, parent):
|
||||
type = defn["type"] if "type" in defn else None
|
||||
label = defn["label"]["text"] if "label" in defn and "text" in defn["label"] else ""
|
||||
packAttrs = defn["packAttrs"] if "packAttrs" in defn else None
|
||||
manager = defn["manager"] if "manager" in defn else None
|
||||
managerAttrs = defn["managerAttrs"] if "managerAttrs" in defn else None
|
||||
options = defn["options"] if "options" in defn else None
|
||||
widget = make_widget(self, type, parent, label, None, packAttrs, options)
|
||||
widget = make_widget(self, type, parent, label, None, manager, managerAttrs, options)
|
||||
return widget
|
||||
|
||||
def make_widgets_from_dict(self, defns, parent):
|
||||
|
||||
Reference in New Issue
Block a user