Merge pull request #2320 from PySimpleGUI/Dev-latest

Colors for tabs!
This commit is contained in:
PySimpleGUI 2019-12-06 22:36:00 -05:00 committed by GitHub
commit 0892252984
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 38 additions and 35 deletions

View File

@ -1,6 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.8.0 Released - 04-Dec-2019" version = __version__ = "4.8.0.1 Unreleased - Tab colors!"
port = 'PySimpleGUI' port = 'PySimpleGUI'
@ -3061,13 +3061,18 @@ class Graph(Element):
if center_location == (None, None): if center_location == (None, None):
return return
converted_point = self._convert_xy_to_canvas_xy(center_location[0], center_location[1]) converted_point = self._convert_xy_to_canvas_xy(center_location[0], center_location[1])
radius_converted = self._convert_xy_to_canvas_xy(0,radius)
# radius = radius_converted[1]-5
# print(f'center = {converted_point} radius converted = {radius_converted}')
if self._TKCanvas2 is None: if self._TKCanvas2 is None:
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
# print('Oval parms', int(converted_point[0]) - int(radius), int(converted_point[1]) - int(radius),
# int(converted_point[0]) + int(radius), int(converted_point[1]) + int(radius))
try: # needed in case the window was closed with an X try: # needed in case the window was closed with an X
id = self._TKCanvas2.create_oval(converted_point[0] - radius, converted_point[1] - radius, id = self._TKCanvas2.create_oval(int(converted_point[0]) - int(radius), int(converted_point[1]) - int(radius),
converted_point[0] + radius, converted_point[1] + radius, fill=fill_color, int(converted_point[0]) + int(radius), int(converted_point[1]) + int(radius), fill=fill_color,
outline=line_color) outline=line_color)
except: except:
id = None id = None
@ -3666,15 +3671,18 @@ class Tab(Element):
if self.Widget is None: if self.Widget is None:
warnings.warn('You cannot Update element with key = {} until the window has been Read or Finalized'.format(self.Key), UserWarning) warnings.warn('You cannot Update element with key = {} until the window has been Read or Finalized'.format(self.Key), UserWarning)
return return
if disabled is None: state = 'normal'
return if disabled is not None:
self.Disabled = disabled self.Disabled = disabled
state = 'disabled' if disabled is True else 'normal' if disabled:
self.ParentNotebook.tab(self.TabID, state=state) state = 'disabled'
if visible is False: if visible is False:
self.ParentNotebook.pack_forget() state = 'hidden'
elif visible is True: self.ParentNotebook.tab(self.TabID, state=state)
self.ParentNotebook.pack() # if visible is False:
# self.ParentNotebook.pack_forget()
# elif visible is True:
# self.ParentNotebook.pack()
return self return self
def _GetElementAtLocation(self, location): def _GetElementAtLocation(self, location):
@ -3717,14 +3725,15 @@ class TabGroup(Element):
TabGroup Element groups together your tabs into the group of tabs you see displayed in your window TabGroup Element groups together your tabs into the group of tabs you see displayed in your window
""" """
def __init__(self, layout, tab_location=None, title_color=None, selected_title_color=None, background_color=None, def __init__(self, layout, tab_location=None, title_color=None, tab_background_color=None, selected_title_color=None, selected_background_color=None, background_color=None,
font=None, change_submits=False, enable_events=False, pad=None, border_width=None, theme=None, font=None, change_submits=False, enable_events=False, pad=None, border_width=None, theme=None,
key=None, tooltip=None, visible=True, metadata=None): key=None, tooltip=None, visible=True, metadata=None):
""" """
:param layout: List[List[Tab]] Layout of Tabs. Different than normal layouts. ALL Tabs should be on first row :param layout: List[List[Tab]] Layout of Tabs. Different than normal layouts. ALL Tabs should be on first row
:param tab_location: (str) location that tabs will be displayed. Choices are left, right, top, bottom, lefttop, leftbottom, righttop, rightbottom, bottomleft, bottomright, topleft, topright :param tab_location: (str) location that tabs will be displayed. Choices are left, right, top, bottom, lefttop, leftbottom, righttop, rightbottom, bottomleft, bottomright, topleft, topright
:param title_color: (str) color of text on tabs :param title_color: (str) color of text on tabs
:param selected_title_color: (str) color of tab when it is selected :param selected_title_color: (str) color of tab text when it is selected
:param selected_background_color: (str) color of tab when it is selected
:param background_color: (str) color of background of tabs :param background_color: (str) color of background of tabs
:param font: Union[str, Tuple[str, int]] specifies the font family, size, etc :param font: Union[str, Tuple[str, int]] specifies the font family, size, etc
:param change_submits: (bool) * DEPRICATED DO NOT USE! Same as enable_events :param change_submits: (bool) * DEPRICATED DO NOT USE! Same as enable_events
@ -3745,6 +3754,8 @@ class TabGroup(Element):
self.DictionaryKeyCounter = 0 self.DictionaryKeyCounter = 0
self.ParentWindow = None self.ParentWindow = None
self.SelectedTitleColor = selected_title_color self.SelectedTitleColor = selected_title_color
self.SelectedBackgroundColor = selected_background_color
self.TabBackgroundColor = tab_background_color
self.Rows = [] self.Rows = []
self.TKNotebook = None # type: ttk.Notebook self.TKNotebook = None # type: ttk.Notebook
self.Widget = None # type: ttk.Notebook self.Widget = None # type: ttk.Notebook
@ -5293,7 +5304,7 @@ class Window:
self.WindowIcon = DEFAULT_WINDOW_ICON self.WindowIcon = DEFAULT_WINDOW_ICON
self.AutoClose = auto_close self.AutoClose = auto_close
self.NonBlocking = False self.NonBlocking = False
self.TKroot = None self.TKroot = None # type: tk.Tk
self.TKrootDestroyed = False self.TKrootDestroyed = False
self.CurrentlyRunningMainloop = False self.CurrentlyRunningMainloop = False
self.FormRemainedOpen = False self.FormRemainedOpen = False
@ -8613,6 +8624,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
elif element_type == ELEM_TYPE_GRAPH: elif element_type == ELEM_TYPE_GRAPH:
element = element # type: Graph element = element # type: Graph
width, height = element_size width, height = element_size
print(f'Graph canvas size being created = {element_size}')
# I don't know why TWO canvases were being defined, on inside the other. Was it so entire canvas can move? # I don't know why TWO canvases were being defined, on inside the other. Was it so entire canvas can move?
# 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 = tk.Canvas(tk_row_frame, width=width, height=height, bd=border_depth)
@ -8705,10 +8717,12 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element = element # type: Tab element = element # type: Tab
element.TKFrame = element.Widget = tk.Frame(form.TKNotebook) element.TKFrame = element.Widget = tk.Frame(form.TKNotebook)
PackFormIntoFrame(element, element.TKFrame, toplevel_form) PackFormIntoFrame(element, element.TKFrame, toplevel_form)
state = 'normal'
if element.Disabled: if element.Disabled:
form.TKNotebook.add(element.TKFrame, text=element.Title, state='disabled') state = 'disabled'
else: if element.Visible is False:
form.TKNotebook.add(element.TKFrame, text=element.Title) state = 'hidden'
form.TKNotebook.add(element.TKFrame, text=element.Title, state=state)
form.TKNotebook.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], fill=tk.NONE, expand=False) form.TKNotebook.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], fill=tk.NONE, expand=False)
element.ParentNotebook = form.TKNotebook element.ParentNotebook = form.TKNotebook
element.TabID = form.TabCount element.TabID = form.TabCount
@ -8717,13 +8731,6 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element.TKFrame.configure(background=element.BackgroundColor, element.TKFrame.configure(background=element.BackgroundColor,
highlightbackground=element.BackgroundColor, highlightbackground=element.BackgroundColor,
highlightcolor=element.BackgroundColor) highlightcolor=element.BackgroundColor)
# if element.TextColor != COLOR_SYSTEM_DEFAULT and element.TextColor is not None:
# element.TKFrame.configure(foreground=element.TextColor)
# ttk.Style().configure("TNotebook", background='red')
# ttk.Style().map("TNotebook.Tab", background=[("selected", 'orange')],
# foreground=[("selected", 'green')])
# ttk.Style().configure("TNotebook.Tab", background='blue', foreground='yellow')
if element.BorderWidth is not None: if element.BorderWidth is not None:
element.TKFrame.configure(borderwidth=element.BorderWidth) element.TKFrame.configure(borderwidth=element.BorderWidth)
@ -8756,19 +8763,15 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT: if element.BackgroundColor is not None and element.BackgroundColor != COLOR_SYSTEM_DEFAULT:
style.configure(custom_style, background=element.BackgroundColor, foreground='purple') style.configure(custom_style, background=element.BackgroundColor, foreground='purple')
# style.theme_create("yummy", parent="alt", settings={ # FINALLY the proper styling to get tab colors!
# "TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0]}}, if element.SelectedTitleColor is not None and element.SelectedTitleColor != COLOR_SYSTEM_DEFAULT:
# "TNotebook.Tab": {
# "configure": {"padding": [5, 1], "background": mygreen},
# "map": {"background": [("selected", myred)],
# "expand": [("selected", [1, 1, 1, 0])]}}})
# style.configure(custom_style+'.Tab', background='red')
if element.SelectedTitleColor != None:
style.map(custom_style + '.Tab', foreground=[("selected", element.SelectedTitleColor)]) style.map(custom_style + '.Tab', foreground=[("selected", element.SelectedTitleColor)])
if element.SelectedBackgroundColor is not None and element.SelectedBackgroundColor != COLOR_SYSTEM_DEFAULT:
style.map(custom_style + '.Tab', background=[("selected", element.SelectedBackgroundColor)])
if element.TabBackgroundColor is not None and element.TabBackgroundColor != COLOR_SYSTEM_DEFAULT:
style.configure(custom_style + '.Tab', background= element.TabBackgroundColor)
if element.TextColor is not None and element.TextColor != COLOR_SYSTEM_DEFAULT: if element.TextColor is not None and element.TextColor != COLOR_SYSTEM_DEFAULT:
style.configure(custom_style + '.Tab', foreground=element.TextColor) style.configure(custom_style + '.Tab', foreground=element.TextColor)
# style.configure(custom_style, background='blue', foreground='yellow')
element.TKNotebook = element.Widget = ttk.Notebook(tk_row_frame, style=custom_style) element.TKNotebook = element.Widget = ttk.Notebook(tk_row_frame, style=custom_style)