commit
5228e3d225
|
@ -3950,6 +3950,7 @@ class Window:
|
||||||
def BuildKeyDict(self):
|
def BuildKeyDict(self):
|
||||||
dict = {}
|
dict = {}
|
||||||
self.AllKeysDict = self._BuildKeyDictForWindow(self,self, dict)
|
self.AllKeysDict = self._BuildKeyDictForWindow(self,self, dict)
|
||||||
|
# print(f'keys built = {self.AllKeysDict}')
|
||||||
|
|
||||||
def _BuildKeyDictForWindow(self, top_window, window, key_dict):
|
def _BuildKeyDictForWindow(self, top_window, window, key_dict):
|
||||||
for row_num, row in enumerate(window.Rows):
|
for row_num, row in enumerate(window.Rows):
|
||||||
|
@ -3971,7 +3972,7 @@ class Window:
|
||||||
ELEM_TYPE_INPUT_SLIDER, ELEM_TYPE_GRAPH, ELEM_TYPE_IMAGE,
|
ELEM_TYPE_INPUT_SLIDER, ELEM_TYPE_GRAPH, ELEM_TYPE_IMAGE,
|
||||||
ELEM_TYPE_INPUT_CHECKBOX, ELEM_TYPE_INPUT_LISTBOX, ELEM_TYPE_INPUT_COMBO,
|
ELEM_TYPE_INPUT_CHECKBOX, ELEM_TYPE_INPUT_LISTBOX, ELEM_TYPE_INPUT_COMBO,
|
||||||
ELEM_TYPE_INPUT_MULTILINE, ELEM_TYPE_INPUT_OPTION_MENU, ELEM_TYPE_INPUT_SPIN,
|
ELEM_TYPE_INPUT_MULTILINE, ELEM_TYPE_INPUT_OPTION_MENU, ELEM_TYPE_INPUT_SPIN,
|
||||||
ELEM_TYPE_INPUT_TEXT):
|
ELEM_TYPE_INPUT_RADIO, ELEM_TYPE_INPUT_TEXT):
|
||||||
element.Key = top_window.DictionaryKeyCounter
|
element.Key = top_window.DictionaryKeyCounter
|
||||||
top_window.DictionaryKeyCounter += 1
|
top_window.DictionaryKeyCounter += 1
|
||||||
if element.Key is not None:
|
if element.Key is not None:
|
||||||
|
@ -4460,6 +4461,8 @@ def ColorChooserButton(button_text, target=(None, None), image_filename=None, im
|
||||||
##################################### ----- RESULTS ------ ##################################################
|
##################################### ----- RESULTS ------ ##################################################
|
||||||
|
|
||||||
def AddToReturnDictionary(form, element, value):
|
def AddToReturnDictionary(form, element, value):
|
||||||
|
form.ReturnValuesDictionary[element.Key] = value
|
||||||
|
return
|
||||||
if element.Key is None:
|
if element.Key is None:
|
||||||
form.ReturnValuesDictionary[form.DictionaryKeyCounter] = value
|
form.ReturnValuesDictionary[form.DictionaryKeyCounter] = value
|
||||||
element.Key = form.DictionaryKeyCounter
|
element.Key = form.DictionaryKeyCounter
|
||||||
|
@ -5698,6 +5701,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element._TKCanvas2.bind('<Button-3>', element.RightClickMenuCallback)
|
element._TKCanvas2.bind('<Button-3>', element.RightClickMenuCallback)
|
||||||
# ------------------------- MENUBAR element ------------------------- #
|
# ------------------------- MENUBAR element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_MENUBAR:
|
elif element_type == ELEM_TYPE_MENUBAR:
|
||||||
|
element = element # type: MenuBar
|
||||||
menu_def = element.MenuDefinition
|
menu_def = element.MenuDefinition
|
||||||
element.TKMenu = element.Widget = tk.Menu(toplevel_form.TKroot, tearoff=element.Tearoff) # create the menubar
|
element.TKMenu = element.Widget = tk.Menu(toplevel_form.TKroot, tearoff=element.Tearoff) # create the menubar
|
||||||
menubar = element.TKMenu
|
menubar = element.TKMenu
|
||||||
|
@ -7795,6 +7799,7 @@ def main():
|
||||||
|
|
||||||
layout1 = [
|
layout1 = [
|
||||||
[Menu(menu_def)],
|
[Menu(menu_def)],
|
||||||
|
[Image(data=DEFAULT_BASE64_ICON)],
|
||||||
[Text('You are running the PySimpleGUI.py file itself', font='ANY 15', tooltip='My tooltip', key='_TEXT1_')],
|
[Text('You are running the PySimpleGUI.py file itself', font='ANY 15', tooltip='My tooltip', key='_TEXT1_')],
|
||||||
[Text('You should be importing it rather than running it', font='ANY 15')],
|
[Text('You should be importing it rather than running it', font='ANY 15')],
|
||||||
[Frame('Input Text Group', frame1, title_color='red'),
|
[Frame('Input Text Group', frame1, title_color='red'),
|
||||||
|
|
169
PySimpleGUI27.py
169
PySimpleGUI27.py
|
@ -10,9 +10,8 @@ from builtins import map
|
||||||
from builtins import int
|
from builtins import int
|
||||||
from builtins import str
|
from builtins import str
|
||||||
from builtins import object
|
from builtins import object
|
||||||
|
|
||||||
from future import standard_library
|
from future import standard_library
|
||||||
# standard_library.install_aliases()
|
standard_library.install_aliases()
|
||||||
import sys
|
import sys
|
||||||
if sys.version_info[0] >= 3:
|
if sys.version_info[0] >= 3:
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
|
@ -396,6 +395,7 @@ class Element(object):
|
||||||
self.TooltipObject = None
|
self.TooltipObject = None
|
||||||
self.Visible = visible
|
self.Visible = visible
|
||||||
self.TKRightClickMenu = None
|
self.TKRightClickMenu = None
|
||||||
|
self.Widget = None # Set when creating window. Has the main tkinter widget for element
|
||||||
|
|
||||||
def RightClickMenuCallback(self, event):
|
def RightClickMenuCallback(self, event):
|
||||||
self.TKRightClickMenu.tk_popup(event.x_root, event.y_root, 0)
|
self.TKRightClickMenu.tk_popup(event.x_root, event.y_root, 0)
|
||||||
|
@ -516,6 +516,9 @@ class Element(object):
|
||||||
if self.ParentForm.CurrentlyRunningMainloop:
|
if self.ParentForm.CurrentlyRunningMainloop:
|
||||||
self.ParentForm.TKroot.quit()
|
self.ParentForm.TKroot.quit()
|
||||||
|
|
||||||
|
def SetTooltip(self,tooltip_text):
|
||||||
|
self.TooltipObject = ToolTip(self.Widget, text=tooltip_text, timeout=DEFAULT_TOOLTIP_TIME)
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
try:
|
try:
|
||||||
|
@ -914,10 +917,9 @@ class Radio(Element):
|
||||||
tooltip=tooltip, visible=visible)
|
tooltip=tooltip, visible=visible)
|
||||||
|
|
||||||
def Update(self, value=None, disabled=None, visible=None):
|
def Update(self, value=None, disabled=None, visible=None):
|
||||||
location = EncodeRadioRowCol(self.ParentForm.ContainerElemementNumber, self.Position[0], self.Position[1])
|
|
||||||
if value is not None:
|
if value is not None:
|
||||||
try:
|
try:
|
||||||
self.TKIntVar.set(location)
|
self.TKIntVar.set(self.EncodedRadioValue)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
self.InitialState = value
|
self.InitialState = value
|
||||||
|
@ -2043,7 +2045,7 @@ class Graph(Element):
|
||||||
self.DragSubmits = drag_submits
|
self.DragSubmits = drag_submits
|
||||||
self.ClickPosition = (None, None)
|
self.ClickPosition = (None, None)
|
||||||
self.MouseButtonDown = False
|
self.MouseButtonDown = False
|
||||||
self.Images = []
|
self.Images = {}
|
||||||
self.RightClickMenu = right_click_menu
|
self.RightClickMenu = right_click_menu
|
||||||
|
|
||||||
super().__init__(ELEM_TYPE_GRAPH, background_color=background_color, size=canvas_size, pad=pad, key=key,
|
super().__init__(ELEM_TYPE_GRAPH, background_color=background_color, size=canvas_size, pad=pad, key=key,
|
||||||
|
@ -2198,9 +2200,9 @@ class Graph(Element):
|
||||||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||||
print('Call Window.Finalize() prior to this operation')
|
print('Call Window.Finalize() prior to this operation')
|
||||||
return None
|
return None
|
||||||
self.Images.append(image)
|
|
||||||
try: # in case closed with X
|
try: # in case closed with X
|
||||||
id = self._TKCanvas2.create_image(converted_point, image=image, anchor=tk.NW)
|
id = self._TKCanvas2.create_image(converted_point, image=image, anchor=tk.NW)
|
||||||
|
self.Images[id] = image
|
||||||
except:
|
except:
|
||||||
id = None
|
id = None
|
||||||
return id
|
return id
|
||||||
|
@ -2212,6 +2214,7 @@ class Graph(Element):
|
||||||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||||
print('Call Window.Finalize() prior to this operation')
|
print('Call Window.Finalize() prior to this operation')
|
||||||
return None
|
return None
|
||||||
|
self.Images = {}
|
||||||
try: # in case window was closed with X
|
try: # in case window was closed with X
|
||||||
self._TKCanvas2.delete('all')
|
self._TKCanvas2.delete('all')
|
||||||
except:
|
except:
|
||||||
|
@ -2220,6 +2223,7 @@ class Graph(Element):
|
||||||
|
|
||||||
def DeleteFigure(self, id):
|
def DeleteFigure(self, id):
|
||||||
try:
|
try:
|
||||||
|
del self.Images[id]
|
||||||
self._TKCanvas2.delete(id)
|
self._TKCanvas2.delete(id)
|
||||||
except:
|
except:
|
||||||
print('DeleteFigure - bad ID {}'.format(id))
|
print('DeleteFigure - bad ID {}'.format(id))
|
||||||
|
@ -3545,7 +3549,7 @@ class Window(object):
|
||||||
progress_bar_color=(None, None), background_color=None, border_depth=None, auto_close=False,
|
progress_bar_color=(None, None), background_color=None, border_depth=None, auto_close=False,
|
||||||
auto_close_duration=DEFAULT_AUTOCLOSE_TIME, icon=DEFAULT_WINDOW_ICON, force_toplevel=False,
|
auto_close_duration=DEFAULT_AUTOCLOSE_TIME, icon=DEFAULT_WINDOW_ICON, force_toplevel=False,
|
||||||
alpha_channel=1, return_keyboard_events=False, use_default_focus=True, text_justification=None,
|
alpha_channel=1, return_keyboard_events=False, use_default_focus=True, text_justification=None,
|
||||||
no_titlebar=False, grab_anywhere=False, keep_on_top=False, resizable=False, disable_close=False, disable_minimize=False, right_click_menu=None):
|
no_titlebar=False, grab_anywhere=False, keep_on_top=False, resizable=False, disable_close=False, disable_minimize=False, right_click_menu=None, transparent_color=None):
|
||||||
'''
|
'''
|
||||||
Window
|
Window
|
||||||
:param title:
|
:param title:
|
||||||
|
@ -3633,6 +3637,8 @@ class Window(object):
|
||||||
self.Margins = margins if margins != (None, None) else DEFAULT_MARGINS
|
self.Margins = margins if margins != (None, None) else DEFAULT_MARGINS
|
||||||
self.ContainerElemementNumber = Window.GetAContainerNumber()
|
self.ContainerElemementNumber = Window.GetAContainerNumber()
|
||||||
self.AllKeysDict = {}
|
self.AllKeysDict = {}
|
||||||
|
self.TransparentColor = transparent_color
|
||||||
|
|
||||||
if layout is not None:
|
if layout is not None:
|
||||||
self.Layout(layout)
|
self.Layout(layout)
|
||||||
|
|
||||||
|
@ -3956,28 +3962,35 @@ class Window(object):
|
||||||
|
|
||||||
def BuildKeyDict(self):
|
def BuildKeyDict(self):
|
||||||
dict = {}
|
dict = {}
|
||||||
self.AllKeysDict = self._BuildKeyDictForWindow(self, dict)
|
self.AllKeysDict = self._BuildKeyDictForWindow(self,self, dict)
|
||||||
|
# print(f'keys built = {self.AllKeysDict}')
|
||||||
|
|
||||||
def _BuildKeyDictForWindow(self, window, key_dict):
|
def _BuildKeyDictForWindow(self, top_window, window, key_dict):
|
||||||
for row_num, row in enumerate(window.Rows):
|
for row_num, row in enumerate(window.Rows):
|
||||||
for col_num, element in enumerate(row):
|
for col_num, element in enumerate(row):
|
||||||
if element.Type == ELEM_TYPE_COLUMN:
|
if element.Type == ELEM_TYPE_COLUMN:
|
||||||
key_dict = self._BuildKeyDictForWindow(element, key_dict)
|
key_dict = self._BuildKeyDictForWindow(top_window, element, key_dict)
|
||||||
if element.Type == ELEM_TYPE_FRAME:
|
if element.Type == ELEM_TYPE_FRAME:
|
||||||
key_dict = self._BuildKeyDictForWindow(element, key_dict)
|
key_dict = self._BuildKeyDictForWindow(top_window, element, key_dict)
|
||||||
if element.Type == ELEM_TYPE_TAB_GROUP:
|
if element.Type == ELEM_TYPE_TAB_GROUP:
|
||||||
key_dict = self._BuildKeyDictForWindow(element, key_dict)
|
key_dict = self._BuildKeyDictForWindow(top_window, element, key_dict)
|
||||||
if element.Type == ELEM_TYPE_PANE:
|
if element.Type == ELEM_TYPE_PANE:
|
||||||
key_dict = self._BuildKeyDictForWindow(element, key_dict)
|
key_dict = self._BuildKeyDictForWindow(top_window, element, key_dict)
|
||||||
if element.Type == ELEM_TYPE_TAB:
|
if element.Type == ELEM_TYPE_TAB:
|
||||||
key_dict = self._BuildKeyDictForWindow(element, key_dict)
|
key_dict = self._BuildKeyDictForWindow(top_window, element, key_dict)
|
||||||
if element.Key is None and element.Type != ELEM_TYPE_TEXT:
|
if element.Key is None: # if no key has been assigned.... create one for input elements
|
||||||
if element.Type != ELEM_TYPE_BUTTON:
|
if element.Type == ELEM_TYPE_BUTTON:
|
||||||
element.Key = window.DictionaryKeyCounter
|
|
||||||
window.DictionaryKeyCounter += 1
|
|
||||||
else:
|
|
||||||
element.Key = element.ButtonText
|
element.Key = element.ButtonText
|
||||||
|
if element.Type in (ELEM_TYPE_MENUBAR, ELEM_TYPE_BUTTONMENU, ELEM_TYPE_CANVAS,
|
||||||
|
ELEM_TYPE_INPUT_SLIDER, ELEM_TYPE_GRAPH, ELEM_TYPE_IMAGE,
|
||||||
|
ELEM_TYPE_INPUT_CHECKBOX, ELEM_TYPE_INPUT_LISTBOX, ELEM_TYPE_INPUT_COMBO,
|
||||||
|
ELEM_TYPE_INPUT_MULTILINE, ELEM_TYPE_INPUT_OPTION_MENU, ELEM_TYPE_INPUT_SPIN,
|
||||||
|
ELEM_TYPE_INPUT_RADIO, ELEM_TYPE_INPUT_TEXT):
|
||||||
|
element.Key = top_window.DictionaryKeyCounter
|
||||||
|
top_window.DictionaryKeyCounter += 1
|
||||||
if element.Key is not None:
|
if element.Key is not None:
|
||||||
|
if element.Key in key_dict.keys():
|
||||||
|
print('*** Duplicate key found in your layout {} ***'.format(element.Key))
|
||||||
key_dict[element.Key] = element
|
key_dict[element.Key] = element
|
||||||
return key_dict
|
return key_dict
|
||||||
|
|
||||||
|
@ -4013,7 +4026,13 @@ class Window(object):
|
||||||
self.TKroot.iconify()
|
self.TKroot.iconify()
|
||||||
|
|
||||||
def Maximize(self):
|
def Maximize(self):
|
||||||
self.TKroot.attributes('-fullscreen', True)
|
self.TKroot.state('zoomed')
|
||||||
|
# this method removes the titlebar too
|
||||||
|
# self.TKroot.attributes('-fullscreen', True)
|
||||||
|
|
||||||
|
def Normal(self):
|
||||||
|
self.TKroot.state('normal')
|
||||||
|
|
||||||
|
|
||||||
def StartMove(self, event):
|
def StartMove(self, event):
|
||||||
try:
|
try:
|
||||||
|
@ -4174,6 +4193,12 @@ class Window(object):
|
||||||
# A dummy function. Needed in Qt but not tkinter
|
# A dummy function. Needed in Qt but not tkinter
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def SetTransparentColor(self, color):
|
||||||
|
try:
|
||||||
|
self.TKroot.attributes('-transparentcolor', color)
|
||||||
|
except:
|
||||||
|
print('Transparent color not supported on this platform (windows only)')
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -4311,6 +4336,7 @@ def Exit(button_text='Exit', size=(None, None), auto_size_button=None, button_co
|
||||||
bind_return_key=bind_return_key, focus=focus, pad=pad, key=key)
|
bind_return_key=bind_return_key, focus=focus, pad=pad, key=key)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------- YES BUTTON Element lazy function ------------------------- #
|
# ------------------------- YES BUTTON Element lazy function ------------------------- #
|
||||||
def Yes(button_text='Yes', size=(None, None), auto_size_button=None, button_color=None, disabled=False, tooltip=None,
|
def Yes(button_text='Yes', size=(None, None), auto_size_button=None, button_color=None, disabled=False, tooltip=None,
|
||||||
font=None, bind_return_key=True, focus=False, pad=None, key=None):
|
font=None, bind_return_key=True, focus=False, pad=None, key=None):
|
||||||
|
@ -4419,6 +4445,8 @@ def ColorChooserButton(button_text, target=(None, None), image_filename=None, im
|
||||||
##################################### ----- RESULTS ------ ##################################################
|
##################################### ----- RESULTS ------ ##################################################
|
||||||
|
|
||||||
def AddToReturnDictionary(form, element, value):
|
def AddToReturnDictionary(form, element, value):
|
||||||
|
form.ReturnValuesDictionary[element.Key] = value
|
||||||
|
return
|
||||||
if element.Key is None:
|
if element.Key is None:
|
||||||
form.ReturnValuesDictionary[form.DictionaryKeyCounter] = value
|
form.ReturnValuesDictionary[form.DictionaryKeyCounter] = value
|
||||||
element.Key = form.DictionaryKeyCounter
|
element.Key = form.DictionaryKeyCounter
|
||||||
|
@ -4939,7 +4967,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- COLUMN element ------------------------- #
|
# ------------------------- COLUMN element ------------------------- #
|
||||||
if element_type == ELEM_TYPE_COLUMN:
|
if element_type == ELEM_TYPE_COLUMN:
|
||||||
if element.Scrollable:
|
if element.Scrollable:
|
||||||
element.TKColFrame = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working
|
element.TKColFrame = element.Widget = TkScrollableFrame(tk_row_frame, element.VerticalScrollOnly) # do not use yet! not working
|
||||||
PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form)
|
PackFormIntoFrame(element, element.TKColFrame.TKFrame, toplevel_form)
|
||||||
element.TKColFrame.TKFrame.update()
|
element.TKColFrame.TKFrame.update()
|
||||||
if element.Size == (None, None): # if no size specified, use column width x column height/2
|
if element.Size == (None, None): # if no size specified, use column width x column height/2
|
||||||
|
@ -4983,7 +5011,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- Pane element ------------------------- #
|
# ------------------------- Pane element ------------------------- #
|
||||||
if element_type == ELEM_TYPE_PANE:
|
if element_type == ELEM_TYPE_PANE:
|
||||||
bd = element.BorderDepth if element.BorderDepth is not None else border_depth
|
bd = element.BorderDepth if element.BorderDepth is not None else border_depth
|
||||||
element.PanedWindow = tk.PanedWindow(tk_row_frame,
|
element.PanedWindow = element.Widget = tk.PanedWindow(tk_row_frame,
|
||||||
orient=tk.VERTICAL if element.Orientation.startswith('v') else tk.HORIZONTAL,
|
orient=tk.VERTICAL if element.Orientation.startswith('v') else tk.HORIZONTAL,
|
||||||
borderwidth=bd,
|
borderwidth=bd,
|
||||||
bd=bd,
|
bd=bd,
|
||||||
|
@ -5042,7 +5070,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
||||||
# tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
# tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
||||||
# justify=justify, bd=border_depth, font=font)
|
# justify=justify, bd=border_depth, font=font)
|
||||||
tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
tktext_label = element.Widget = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
||||||
justify=justify, bd=border_depth, font=font)
|
justify=justify, bd=border_depth, font=font)
|
||||||
# Set wrap-length for text (in PIXELS) == PAIN IN THE ASS
|
# Set wrap-length for text (in PIXELS) == PAIN IN THE ASS
|
||||||
wraplen = tktext_label.winfo_reqwidth() + 40 # width of widget in Pixels
|
wraplen = tktext_label.winfo_reqwidth() + 40 # width of widget in Pixels
|
||||||
|
@ -5094,10 +5122,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
bc = DEFAULT_BUTTON_COLOR
|
bc = DEFAULT_BUTTON_COLOR
|
||||||
border_depth = element.BorderWidth
|
border_depth = element.BorderWidth
|
||||||
if btype != BUTTON_TYPE_REALTIME:
|
if btype != BUTTON_TYPE_REALTIME:
|
||||||
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height,
|
tkbutton = element.Widget = tk.Button(tk_row_frame, text=btext, width=width, height=height,
|
||||||
command=element.ButtonCallBack, justify=tk.LEFT, bd=border_depth, font=font)
|
command=element.ButtonCallBack, justify=tk.LEFT, bd=border_depth, font=font)
|
||||||
else:
|
else:
|
||||||
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT,
|
tkbutton = element.Widget = tk.Button(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT,
|
||||||
bd=border_depth, font=font)
|
bd=border_depth, font=font)
|
||||||
tkbutton.bind('<ButtonRelease-1>', element.ButtonReleaseCallBack)
|
tkbutton.bind('<ButtonRelease-1>', element.ButtonReleaseCallBack)
|
||||||
tkbutton.bind('<ButtonPress-1>', element.ButtonPressCallBack)
|
tkbutton.bind('<ButtonPress-1>', element.ButtonPressCallBack)
|
||||||
|
@ -5169,7 +5197,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
else:
|
else:
|
||||||
bc = DEFAULT_BUTTON_COLOR
|
bc = DEFAULT_BUTTON_COLOR
|
||||||
border_depth = element.BorderWidth
|
border_depth = element.BorderWidth
|
||||||
tkbutton = tk.Menubutton(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT, bd=border_depth, font=font)
|
tkbutton = element.Widget = tk.Menubutton(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT, bd=border_depth, font=font)
|
||||||
element.TKButtonMenu = tkbutton
|
element.TKButtonMenu = tkbutton
|
||||||
if bc != (None, None) and bc != COLOR_SYSTEM_DEFAULT and bc[1] != COLOR_SYSTEM_DEFAULT:
|
if bc != (None, None) and bc != COLOR_SYSTEM_DEFAULT and bc[1] != COLOR_SYSTEM_DEFAULT:
|
||||||
tkbutton.config(foreground=bc[0], background=bc[1], activebackground=bc[1])
|
tkbutton.config(foreground=bc[0], background=bc[1], activebackground=bc[1])
|
||||||
|
@ -5235,7 +5263,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
justification = DEFAULT_TEXT_JUSTIFICATION
|
justification = DEFAULT_TEXT_JUSTIFICATION
|
||||||
justify = tk.LEFT if justification == 'left' else tk.CENTER if justification == 'center' else tk.RIGHT
|
justify = tk.LEFT if justification == 'left' else tk.CENTER if justification == 'center' else tk.RIGHT
|
||||||
# anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
# anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
||||||
element.TKEntry = tk.Entry(tk_row_frame, width=element_size[0], textvariable=element.TKStringVar,
|
element.TKEntry = element.Widget = tk.Entry(tk_row_frame, width=element_size[0], textvariable=element.TKStringVar,
|
||||||
bd=border_depth, font=font, show=show, justify=justify)
|
bd=border_depth, font=font, show=show, justify=justify)
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
element.TKEntry.bind('<Key>', element.KeyboardHandler)
|
element.TKEntry.bind('<Key>', element.KeyboardHandler)
|
||||||
|
@ -5275,8 +5303,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# print(style_name)
|
# print(style_name)
|
||||||
combostyle = tkinter.ttk.Style()
|
combostyle = tkinter.ttk.Style()
|
||||||
|
|
||||||
unique_field = str(time.time()).replace('.','') + '.TCombobox.field'
|
|
||||||
# Creates a unique name for each field element(Sure there is a better way to do this)
|
# Creates a unique name for each field element(Sure there is a better way to do this)
|
||||||
|
|
||||||
|
unique_field = str(element.Key) + '.TCombobox.field'
|
||||||
|
|
||||||
|
# unique_field = str(time.time()).replace('.', '') + str(element.Key) + '.TCombobox.field'
|
||||||
|
|
||||||
|
# unique_field = str(time.time()).replace('.','') + '.TCombobox.field'
|
||||||
# unique_field = str(datetime.datetime.today().timestamp()).replace('.','') + '.TCombobox.field'
|
# unique_field = str(datetime.datetime.today().timestamp()).replace('.','') + '.TCombobox.field'
|
||||||
# unique_field = str(randint(1,50000000)) + '.TCombobox.field'
|
# unique_field = str(randint(1,50000000)) + '.TCombobox.field'
|
||||||
|
|
||||||
|
@ -5308,7 +5341,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
combostyle.configure(style_name, fieldbackground=element.BackgroundColor)
|
combostyle.configure(style_name, fieldbackground=element.BackgroundColor)
|
||||||
combostyle.configure(style_name, selectforeground=element.TextColor)
|
combostyle.configure(style_name, selectforeground=element.TextColor)
|
||||||
|
|
||||||
element.TKCombo = tkinter.ttk.Combobox(tk_row_frame, width=width, textvariable=element.TKStringVar, font=font, style=style_name)
|
element.TKCombo = element.Widget = tkinter.ttk.Combobox(tk_row_frame, width=width, textvariable=element.TKStringVar, font=font, style=style_name)
|
||||||
if element.Size[1] != 1 and element.Size[1] is not None:
|
if element.Size[1] != 1 and element.Size[1] is not None:
|
||||||
element.TKCombo.configure(height=element.Size[1])
|
element.TKCombo.configure(height=element.Size[1])
|
||||||
element.TKCombo['values'] = element.Values
|
element.TKCombo['values'] = element.Values
|
||||||
|
@ -5341,7 +5374,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element.TKStringVar = tk.StringVar()
|
element.TKStringVar = tk.StringVar()
|
||||||
default = element.DefaultValue if element.DefaultValue else element.Values[0]
|
default = element.DefaultValue if element.DefaultValue else element.Values[0]
|
||||||
element.TKStringVar.set(default)
|
element.TKStringVar.set(default)
|
||||||
element.TKOptionMenu = tk.OptionMenu(tk_row_frame, element.TKStringVar, *element.Values)
|
element.TKOptionMenu = element.Widget = tk.OptionMenu(tk_row_frame, element.TKStringVar, *element.Values)
|
||||||
element.TKOptionMenu.config(highlightthickness=0, font=font, width=width)
|
element.TKOptionMenu.config(highlightthickness=0, font=font, width=width)
|
||||||
element.TKOptionMenu.config(borderwidth=border_depth)
|
element.TKOptionMenu.config(borderwidth=border_depth)
|
||||||
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
@ -5365,7 +5398,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
width = max_line_len
|
width = max_line_len
|
||||||
listbox_frame = tk.Frame(tk_row_frame)
|
listbox_frame = tk.Frame(tk_row_frame)
|
||||||
element.TKStringVar = tk.StringVar()
|
element.TKStringVar = tk.StringVar()
|
||||||
element.TKListbox = tk.Listbox(listbox_frame, height=element_size[1], width=width,
|
element.TKListbox = element.Widget = tk.Listbox(listbox_frame, height=element_size[1], width=width,
|
||||||
selectmode=element.SelectMode, font=font, exportselection=False)
|
selectmode=element.SelectMode, font=font, exportselection=False)
|
||||||
for index, item in enumerate(element.Values):
|
for index, item in enumerate(element.Values):
|
||||||
element.TKListbox.insert(tk.END, item)
|
element.TKListbox.insert(tk.END, item)
|
||||||
|
@ -5403,7 +5436,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element = element # type: Multiline
|
element = element # type: Multiline
|
||||||
default_text = element.DefaultText
|
default_text = element.DefaultText
|
||||||
width, height = element_size
|
width, height = element_size
|
||||||
element.TKText = tk.scrolledtext.ScrolledText(tk_row_frame, width=width, height=height, wrap='word',
|
element.TKText = element.Widget = tk.scrolledtext.ScrolledText(tk_row_frame, width=width, height=height, wrap='word',
|
||||||
bd=border_depth, font=font, relief=tk.FLAT)
|
bd=border_depth, font=font, relief=tk.FLAT)
|
||||||
element.TKText.insert(1.0, default_text) # set the default text
|
element.TKText.insert(1.0, default_text) # set the default text
|
||||||
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
@ -5438,11 +5471,11 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element.TKIntVar = tk.IntVar()
|
element.TKIntVar = tk.IntVar()
|
||||||
element.TKIntVar.set(default_value if default_value is not None else 0)
|
element.TKIntVar.set(default_value if default_value is not None else 0)
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
element.TKCheckbutton = tk.Checkbutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
element.TKCheckbutton = element.Widget = tk.Checkbutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
||||||
variable=element.TKIntVar, bd=border_depth, font=font,
|
variable=element.TKIntVar, bd=border_depth, font=font,
|
||||||
command=element.CheckboxHandler)
|
command=element.CheckboxHandler)
|
||||||
else:
|
else:
|
||||||
element.TKCheckbutton = tk.Checkbutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
element.TKCheckbutton = element.Widget = tk.Checkbutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
||||||
variable=element.TKIntVar, bd=border_depth, font=font)
|
variable=element.TKIntVar, bd=border_depth, font=font)
|
||||||
if default_value is None or element.Disabled:
|
if default_value is None or element.Disabled:
|
||||||
element.TKCheckbutton.configure(state='disable')
|
element.TKCheckbutton.configure(state='disable')
|
||||||
|
@ -5478,6 +5511,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element.TKProgressBar.TKProgressBarForReal.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1])
|
element.TKProgressBar.TKProgressBarForReal.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1])
|
||||||
if element.Visible is False:
|
if element.Visible is False:
|
||||||
element.TKProgressBar.TKProgressBarForReal.pack_forget()
|
element.TKProgressBar.TKProgressBarForReal.pack_forget()
|
||||||
|
element.Widget = element.TKProgressBar.TKProgressBarForReal
|
||||||
# ------------------------- RADIO BUTTON element ------------------------- #
|
# ------------------------- RADIO BUTTON element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_INPUT_RADIO:
|
elif element_type == ELEM_TYPE_INPUT_RADIO:
|
||||||
element = element # type: Radio
|
element = element # type: Radio
|
||||||
|
@ -5496,11 +5530,11 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if default_value: # if this radio is the one selected, set RadVar to match
|
if default_value: # if this radio is the one selected, set RadVar to match
|
||||||
element.TKIntVar.set(value)
|
element.TKIntVar.set(value)
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
element.TKRadio = tk.Radiobutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
element.TKRadio = element.Widget = tk.Radiobutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
||||||
variable=element.TKIntVar, value=value, bd=border_depth, font=font,
|
variable=element.TKIntVar, value=value, bd=border_depth, font=font,
|
||||||
command=element.RadioHandler)
|
command=element.RadioHandler)
|
||||||
else:
|
else:
|
||||||
element.TKRadio = tk.Radiobutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
element.TKRadio = element.Widget = tk.Radiobutton(tk_row_frame, anchor=tk.NW, text=element.Text, width=width,
|
||||||
variable=element.TKIntVar, value=value, bd=border_depth, font=font)
|
variable=element.TKIntVar, value=value, bd=border_depth, font=font)
|
||||||
if not element.BackgroundColor in (None, COLOR_SYSTEM_DEFAULT):
|
if not element.BackgroundColor in (None, COLOR_SYSTEM_DEFAULT):
|
||||||
element.TKRadio.configure(background=element.BackgroundColor)
|
element.TKRadio.configure(background=element.BackgroundColor)
|
||||||
|
@ -5519,7 +5553,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
width, height = element_size
|
width, height = element_size
|
||||||
width = 0 if auto_size_text else element_size[0]
|
width = 0 if auto_size_text else element_size[0]
|
||||||
element.TKStringVar = tk.StringVar()
|
element.TKStringVar = tk.StringVar()
|
||||||
element.TKSpinBox = tk.Spinbox(tk_row_frame, values=element.Values, textvariable=element.TKStringVar,
|
element.TKSpinBox = element.Widget = tk.Spinbox(tk_row_frame, values=element.Values, textvariable=element.TKStringVar,
|
||||||
width=width, bd=border_depth)
|
width=width, bd=border_depth)
|
||||||
element.TKStringVar.set(element.DefaultValue)
|
element.TKStringVar.set(element.DefaultValue)
|
||||||
element.TKSpinBox.configure(font=font) # set wrap to width of widget
|
element.TKSpinBox.configure(font=font) # set wrap to width of widget
|
||||||
|
@ -5540,7 +5574,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- OUTPUT element ------------------------- #
|
# ------------------------- OUTPUT element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_OUTPUT:
|
elif element_type == ELEM_TYPE_OUTPUT:
|
||||||
width, height = element_size
|
width, height = element_size
|
||||||
element._TKOut = TKOutput(tk_row_frame, width=width, height=height, bd=border_depth,
|
element._TKOut = element.Widget = TKOutput(tk_row_frame, width=width, height=height, bd=border_depth,
|
||||||
background_color=element.BackgroundColor, text_color=text_color, font=font,
|
background_color=element.BackgroundColor, text_color=text_color, font=font,
|
||||||
pad=elementpad)
|
pad=elementpad)
|
||||||
element._TKOut.output.configure(takefocus=0) # make it so that Output does not get focus
|
element._TKOut.output.configure(takefocus=0) # make it so that Output does not get focus
|
||||||
|
@ -5572,10 +5606,10 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
else:
|
else:
|
||||||
width, height = element_size
|
width, height = element_size
|
||||||
if photo is not None:
|
if photo is not None:
|
||||||
element.tktext_label = tk.Label(tk_row_frame, image=photo, width=width, height=height,
|
element.tktext_label = element.Widget = tk.Label(tk_row_frame, image=photo, width=width, height=height,
|
||||||
bd=border_depth)
|
bd=border_depth)
|
||||||
else:
|
else:
|
||||||
element.tktext_label = tk.Label(tk_row_frame, width=width, height=height, bd=border_depth)
|
element.tktext_label = element.Widget = tk.Label(tk_row_frame, width=width, height=height, bd=border_depth)
|
||||||
if element.BackgroundColor is not None:
|
if element.BackgroundColor is not None:
|
||||||
element.tktext_label.config(background=element.BackgroundColor)
|
element.tktext_label.config(background=element.BackgroundColor)
|
||||||
|
|
||||||
|
@ -5599,7 +5633,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
elif element_type == ELEM_TYPE_CANVAS:
|
elif element_type == ELEM_TYPE_CANVAS:
|
||||||
width, height = element_size
|
width, height = element_size
|
||||||
if element._TKCanvas is None:
|
if element._TKCanvas is None:
|
||||||
element._TKCanvas = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
element._TKCanvas = element.Widget = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
||||||
else:
|
else:
|
||||||
element._TKCanvas.master = tk_row_frame
|
element._TKCanvas.master = tk_row_frame
|
||||||
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
@ -5625,7 +5659,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# element._TKCanvas = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
# element._TKCanvas = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
||||||
# else:
|
# else:
|
||||||
# element._TKCanvas.master = tk_row_frame
|
# element._TKCanvas.master = tk_row_frame
|
||||||
element._TKCanvas2 = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
element._TKCanvas2 = element.Widget = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
|
||||||
element._TKCanvas2.pack(side=tk.LEFT)
|
element._TKCanvas2.pack(side=tk.LEFT)
|
||||||
element._TKCanvas2.addtag_all('mytag')
|
element._TKCanvas2.addtag_all('mytag')
|
||||||
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
|
||||||
|
@ -5651,8 +5685,9 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
element._TKCanvas2.bind('<Button-3>', element.RightClickMenuCallback)
|
element._TKCanvas2.bind('<Button-3>', element.RightClickMenuCallback)
|
||||||
# ------------------------- MENUBAR element ------------------------- #
|
# ------------------------- MENUBAR element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_MENUBAR:
|
elif element_type == ELEM_TYPE_MENUBAR:
|
||||||
|
element = element # type: MenuBar
|
||||||
menu_def = element.MenuDefinition
|
menu_def = element.MenuDefinition
|
||||||
element.TKMenu = tk.Menu(toplevel_form.TKroot, tearoff=element.Tearoff) # create the menubar
|
element.TKMenu = element.Widget = tk.Menu(toplevel_form.TKroot, tearoff=element.Tearoff) # create the menubar
|
||||||
menubar = element.TKMenu
|
menubar = element.TKMenu
|
||||||
for menu_entry in menu_def:
|
for menu_entry in menu_def:
|
||||||
# print(f'Adding a Menubar ENTRY {menu_entry}')
|
# print(f'Adding a Menubar ENTRY {menu_entry}')
|
||||||
|
@ -5673,7 +5708,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
toplevel_form.TKroot.configure(menu=element.TKMenu)
|
toplevel_form.TKroot.configure(menu=element.TKMenu)
|
||||||
# ------------------------- Frame element ------------------------- #
|
# ------------------------- Frame element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_FRAME:
|
elif element_type == ELEM_TYPE_FRAME:
|
||||||
labeled_frame = tk.LabelFrame(tk_row_frame, text=element.Title, relief=element.Relief)
|
labeled_frame = element.Widget = tk.LabelFrame(tk_row_frame, text=element.Title, relief=element.Relief)
|
||||||
element.TKFrame = labeled_frame
|
element.TKFrame = labeled_frame
|
||||||
PackFormIntoFrame(element, labeled_frame, toplevel_form)
|
PackFormIntoFrame(element, labeled_frame, toplevel_form)
|
||||||
labeled_frame.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1])
|
labeled_frame.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1])
|
||||||
|
@ -5701,7 +5736,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
labeled_frame.bind('<Button-3>', element.RightClickMenuCallback)
|
labeled_frame.bind('<Button-3>', element.RightClickMenuCallback)
|
||||||
# ------------------------- Tab element ------------------------- #
|
# ------------------------- Tab element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_TAB:
|
elif element_type == ELEM_TYPE_TAB:
|
||||||
element.TKFrame = tk.Frame(form.TKNotebook)
|
element.TKFrame = element.Widget = tk.Frame(form.TKNotebook)
|
||||||
PackFormIntoFrame(element, element.TKFrame, toplevel_form)
|
PackFormIntoFrame(element, element.TKFrame, toplevel_form)
|
||||||
if element.Disabled:
|
if element.Disabled:
|
||||||
form.TKNotebook.add(element.TKFrame, text=element.Title, state='disabled')
|
form.TKNotebook.add(element.TKFrame, text=element.Title, state='disabled')
|
||||||
|
@ -5768,7 +5803,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
style.configure(custom_style + '.Tab', foreground=element.TextColor)
|
style.configure(custom_style + '.Tab', foreground=element.TextColor)
|
||||||
# style.configure(custom_style, background='blue', foreground='yellow')
|
# style.configure(custom_style, background='blue', foreground='yellow')
|
||||||
|
|
||||||
element.TKNotebook = tkinter.ttk.Notebook(tk_row_frame, style=custom_style)
|
element.TKNotebook = element.Widget = tkinter.ttk.Notebook(tk_row_frame, style=custom_style)
|
||||||
|
|
||||||
PackFormIntoFrame(element, toplevel_form.TKroot, toplevel_form)
|
PackFormIntoFrame(element, toplevel_form.TKroot, toplevel_form)
|
||||||
|
|
||||||
|
@ -5793,13 +5828,13 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
range_from = element.Range[0]
|
range_from = element.Range[0]
|
||||||
range_to = element.Range[1]
|
range_to = element.Range[1]
|
||||||
if element.ChangeSubmits:
|
if element.ChangeSubmits:
|
||||||
tkscale = tk.Scale(tk_row_frame, orient=element.Orientation, variable=element.TKIntVar,
|
tkscale = element.Widget = tk.Scale(tk_row_frame, orient=element.Orientation, variable=element.TKIntVar,
|
||||||
from_=range_from, to_=range_to, resolution=element.Resolution,
|
from_=range_from, to_=range_to, resolution=element.Resolution,
|
||||||
length=slider_length, width=slider_width, bd=element.BorderWidth,
|
length=slider_length, width=slider_width, bd=element.BorderWidth,
|
||||||
relief=element.Relief, font=font, tickinterval=element.TickInterval,
|
relief=element.Relief, font=font, tickinterval=element.TickInterval,
|
||||||
command=element.SliderChangedHandler)
|
command=element.SliderChangedHandler)
|
||||||
else:
|
else:
|
||||||
tkscale = tk.Scale(tk_row_frame, orient=element.Orientation, variable=element.TKIntVar,
|
tkscale = element.Widget = tk.Scale(tk_row_frame, orient=element.Orientation, variable=element.TKIntVar,
|
||||||
from_=range_from, to_=range_to, resolution=element.Resolution,
|
from_=range_from, to_=range_to, resolution=element.Resolution,
|
||||||
length=slider_length, width=slider_width, bd=element.BorderWidth,
|
length=slider_length, width=slider_width, bd=element.BorderWidth,
|
||||||
relief=element.Relief, font=font, tickinterval=element.TickInterval)
|
relief=element.Relief, font=font, tickinterval=element.TickInterval)
|
||||||
|
@ -5852,7 +5887,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
if element.DisplayRowNumbers: # if display row number, tack on the numbers to front of columns
|
if element.DisplayRowNumbers: # if display row number, tack on the numbers to front of columns
|
||||||
displaycolumns = [element.RowHeaderText, ] + displaycolumns
|
displaycolumns = [element.RowHeaderText, ] + displaycolumns
|
||||||
column_headings = [element.RowHeaderText, ] + element.ColumnHeadings
|
column_headings = [element.RowHeaderText, ] + element.ColumnHeadings
|
||||||
element.TKTreeview = tkinter.ttk.Treeview(frame, columns=column_headings,
|
element.TKTreeview = element.Widget = tkinter.ttk.Treeview(frame, columns=column_headings,
|
||||||
displaycolumns=displaycolumns, show='headings', height=height,
|
displaycolumns=displaycolumns, show='headings', height=height,
|
||||||
selectmode=element.SelectMode,)
|
selectmode=element.SelectMode,)
|
||||||
treeview = element.TKTreeview
|
treeview = element.TKTreeview
|
||||||
|
@ -5949,7 +5984,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
displaycolumns.append(element.ColumnHeadings[i])
|
displaycolumns.append(element.ColumnHeadings[i])
|
||||||
column_headings = element.ColumnHeadings
|
column_headings = element.ColumnHeadings
|
||||||
# ------------- GET THE TREEVIEW WIDGET -------------
|
# ------------- GET THE TREEVIEW WIDGET -------------
|
||||||
element.TKTreeview = tkinter.ttk.Treeview(frame, columns=column_headings,
|
element.TKTreeview = element.Widget = tkinter.ttk.Treeview(frame, columns=column_headings,
|
||||||
displaycolumns=displaycolumns, show='tree headings', height=height,
|
displaycolumns=displaycolumns, show='tree headings', height=height,
|
||||||
selectmode=element.SelectMode)
|
selectmode=element.SelectMode)
|
||||||
treeview = element.TKTreeview
|
treeview = element.TKTreeview
|
||||||
|
@ -6012,7 +6047,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
# ------------------------- Separator element ------------------------- #
|
# ------------------------- Separator element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_SEPARATOR:
|
elif element_type == ELEM_TYPE_SEPARATOR:
|
||||||
element = element # type: VerticalSeparator
|
element = element # type: VerticalSeparator
|
||||||
separator = tkinter.ttk.Separator(tk_row_frame, orient=element.Orientation, )
|
separator = element.Widget = tkinter.ttk.Separator(tk_row_frame, orient=element.Orientation, )
|
||||||
separator.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], fill='both', expand=True)
|
separator.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], fill='both', expand=True)
|
||||||
# ------------------------- StatusBar element ------------------------- #
|
# ------------------------- StatusBar element ------------------------- #
|
||||||
elif element_type == ELEM_TYPE_STATUSBAR:
|
elif element_type == ELEM_TYPE_STATUSBAR:
|
||||||
|
@ -6045,7 +6080,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
||||||
anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
anchor = tk.NW if justification == 'left' else tk.N if justification == 'center' else tk.NE
|
||||||
# tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
# tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
||||||
# justify=justify, bd=border_depth, font=font)
|
# justify=justify, bd=border_depth, font=font)
|
||||||
tktext_label = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
tktext_label = element.Widget = tk.Label(tk_row_frame, textvariable=stringvar, width=width, height=height,
|
||||||
justify=justify, bd=border_depth, font=font)
|
justify=justify, bd=border_depth, font=font)
|
||||||
# Set wrap-length for text (in PIXELS) == PAIN IN THE ASS
|
# Set wrap-length for text (in PIXELS) == PAIN IN THE ASS
|
||||||
wraplen = tktext_label.winfo_reqwidth() + 40 # width of widget in Pixels
|
wraplen = tktext_label.winfo_reqwidth() + 40 # width of widget in Pixels
|
||||||
|
@ -6142,6 +6177,7 @@ def StartupTK(my_flex_form):
|
||||||
else:
|
else:
|
||||||
root = tk.Toplevel()
|
root = tk.Toplevel()
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
root.attributes('-alpha', 0) # hide window while building it. makes for smoother 'paint'
|
root.attributes('-alpha', 0) # hide window while building it. makes for smoother 'paint'
|
||||||
except:
|
except:
|
||||||
|
@ -6168,6 +6204,9 @@ def StartupTK(my_flex_form):
|
||||||
if my_flex_form.KeepOnTop:
|
if my_flex_form.KeepOnTop:
|
||||||
root.wm_attributes("-topmost", 1)
|
root.wm_attributes("-topmost", 1)
|
||||||
|
|
||||||
|
if my_flex_form.TransparentColor is not None:
|
||||||
|
my_flex_form.SetTransparentColor(my_flex_form.TransparentColor)
|
||||||
|
|
||||||
# root.protocol("WM_DELETE_WINDOW", MyFlexForm.DestroyedCallback())
|
# root.protocol("WM_DELETE_WINDOW", MyFlexForm.DestroyedCallback())
|
||||||
# root.bind('<Destroy>', MyFlexForm.DestroyedCallback())
|
# root.bind('<Destroy>', MyFlexForm.DestroyedCallback())
|
||||||
ConvertFlexToTK(my_flex_form)
|
ConvertFlexToTK(my_flex_form)
|
||||||
|
@ -6175,7 +6214,7 @@ def StartupTK(my_flex_form):
|
||||||
my_flex_form.SetIcon(my_flex_form.WindowIcon)
|
my_flex_form.SetIcon(my_flex_form.WindowIcon)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
root.attributes('-alpha', my_flex_form.AlphaChannel) # Make window visible again
|
root.attributes('-alpha', 1 if my_flex_form.AlphaChannel is None else my_flex_form.AlphaChannel) # Make window visible again
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -8018,7 +8057,7 @@ def PopupGetText(message, title=None, default_text='', password_char='', size=(N
|
||||||
|
|
||||||
# --------------------------- PopupAnimated ---------------------------
|
# --------------------------- PopupAnimated ---------------------------
|
||||||
|
|
||||||
def PopupAnimated(image_source, message=None, background_color=None, text_color=None, font=None, no_titlebar=True, grab_anywhere=True, keep_on_top=True, location=(None, None), alpha_channel=.8, time_between_frames=0):
|
def PopupAnimated(image_source, message=None, background_color=None, text_color=None, font=None, no_titlebar=True, grab_anywhere=True, keep_on_top=True, location=(None, None), alpha_channel=None, time_between_frames=0, transparent_color=None):
|
||||||
|
|
||||||
if image_source is None:
|
if image_source is None:
|
||||||
for image in Window.animated_popup_dict:
|
for image in Window.animated_popup_dict:
|
||||||
|
@ -8028,15 +8067,14 @@ def PopupAnimated(image_source, message=None, background_color=None, text_color=
|
||||||
return
|
return
|
||||||
|
|
||||||
if image_source not in Window.animated_popup_dict:
|
if image_source not in Window.animated_popup_dict:
|
||||||
if type(image_source) is bytes:
|
if type(image_source) is bytes or len(image_source)>300:
|
||||||
layout = [[Image(data=image_source, background_color=background_color, key='_IMAGE_',)],]
|
layout = [[Image(data=image_source, background_color=background_color, key='_IMAGE_',)],]
|
||||||
else:
|
else:
|
||||||
layout = [[Image(filename=image_source, background_color=background_color, key='_IMAGE_',)],]
|
layout = [[Image(filename=image_source, background_color=background_color, key='_IMAGE_',)],]
|
||||||
if message:
|
if message:
|
||||||
layout.append([Text(message, background_color=background_color, text_color=text_color, font=font)])
|
layout.append([Text(message, background_color=background_color, text_color=text_color, font=font)])
|
||||||
|
|
||||||
window = Window('Animated GIF', no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top,
|
window = Window('Animated GIF', layout, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, background_color=background_color, location=location, alpha_channel=alpha_channel, element_padding=(0,0), margins=(0,0), transparent_color=transparent_color).Finalize()
|
||||||
background_color=background_color, location=location, alpha_channel=alpha_channel, element_padding=(0,0), margins=(0,0)).Layout(layout).Finalize()
|
|
||||||
Window.animated_popup_dict[image_source] = window
|
Window.animated_popup_dict[image_source] = window
|
||||||
else:
|
else:
|
||||||
window = Window.animated_popup_dict[image_source]
|
window = Window.animated_popup_dict[image_source]
|
||||||
|
@ -8088,6 +8126,11 @@ def main():
|
||||||
frame2 = [
|
frame2 = [
|
||||||
[Listbox(['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(20, 5))],
|
[Listbox(['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(20, 5))],
|
||||||
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
|
[Combo(['Combo item 1', ], size=(20, 3), text_color='red', background_color='red')],
|
||||||
[Spin([1, 2, 3], size=(4, 3))],
|
[Spin([1, 2, 3], size=(4, 3))],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -8123,12 +8166,13 @@ def main():
|
||||||
|
|
||||||
layout1 = [
|
layout1 = [
|
||||||
[Menu(menu_def)],
|
[Menu(menu_def)],
|
||||||
[Text('You are running the PySimpleGUI.py file itself', font='ANY 15', tooltip='My tooltip')],
|
[Image(data=DEFAULT_BASE64_ICON)],
|
||||||
|
[Text('You are running the PySimpleGUI.py file itself', font='ANY 15', tooltip='My tooltip', key='_TEXT1_')],
|
||||||
[Text('You should be importing it rather than running it', font='ANY 15')],
|
[Text('You should be importing it rather than running it', font='ANY 15')],
|
||||||
[Frame('Input Text Group', frame1, title_color='red'),
|
[Frame('Input Text Group', frame1, title_color='red'),
|
||||||
Image(data=DEFAULT_BASE64_LOADING_GIF, key='_IMAGE_')],
|
Image(data=DEFAULT_BASE64_LOADING_GIF, key='_IMAGE_')],
|
||||||
[Frame('Multiple Choice Group', frame2, title_color='green'),
|
[Frame('Multiple Choice Group', frame2, title_color='green'),
|
||||||
Frame('Binary Choice Group', frame3, title_color='purple'),
|
Frame('Binary Choice Group', frame3, title_color='purple', tooltip='Binary Choice'),
|
||||||
Frame('Variable Choice Group', frame4, title_color='blue')],
|
Frame('Variable Choice Group', frame4, title_color='blue')],
|
||||||
[Frame('Structured Data Group', frame5, title_color='red'), ],
|
[Frame('Structured Data Group', frame5, title_color='red'), ],
|
||||||
# [Frame('Graphing Group', frame6)],
|
# [Frame('Graphing Group', frame6)],
|
||||||
|
@ -8140,7 +8184,9 @@ def main():
|
||||||
|
|
||||||
window = Window('Window Title', layout,
|
window = Window('Window Title', layout,
|
||||||
font=('Helvetica', 13),
|
font=('Helvetica', 13),
|
||||||
|
# background_color='black',
|
||||||
right_click_menu=['&Right', ['Right', '!&Click', '&Menu', 'E&xit', 'Properties']],
|
right_click_menu=['&Right', ['Right', '!&Click', '&Menu', 'E&xit', 'Properties']],
|
||||||
|
# transparent_color= '#9FB8AD',
|
||||||
).Finalize()
|
).Finalize()
|
||||||
graph_elem.DrawCircle((200, 200), 50, 'blue')
|
graph_elem.DrawCircle((200, 200), 50, 'blue')
|
||||||
i = 0
|
i = 0
|
||||||
|
@ -8162,6 +8208,11 @@ def main():
|
||||||
i += 1
|
i += 1
|
||||||
if event == 'Button':
|
if event == 'Button':
|
||||||
print(window.AllKeysDict)
|
print(window.AllKeysDict)
|
||||||
|
window.Element('_TEXT1_').SetTooltip('NEW TEXT')
|
||||||
|
window.SetTransparentColor( '#9FB8AD')
|
||||||
|
# window.TKroot.wm_attributes("-transparent", '#9FB8AD')
|
||||||
|
# window.TKroot.wm_attributes("-transparentcolor", '#9FB8AD')
|
||||||
|
|
||||||
# TimerStop()
|
# TimerStop()
|
||||||
window.Close()
|
window.Close()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue