A bunch of fixes

Removed some color defaults
Added _ to some class methods so users won't get confused and call them.  _close in particular.
Fix for combobox problem
Fixed CRASH when using tabbed forms demo due to rename _
Removed random colors
This commit is contained in:
MikeTheWatchGuy 2018-08-06 12:20:18 -04:00
parent 41561e8d54
commit 99035fb5e8
1 changed files with 45 additions and 29 deletions

View File

@ -9,7 +9,7 @@ import datetime
import sys
import textwrap
# ----====----====----==== Constants the use CAN safely change ====----====----====----#
# ----====----====----==== Constants the user CAN safely change ====----====----====----#
DEFAULT_WINDOW_ICON = ''
DEFAULT_ELEMENT_SIZE = (45,1) # In CHARACTERS
DEFAULT_MARGINS = (10,5) # Margins for each LEFT/RIGHT margin is first term
@ -34,8 +34,8 @@ NICE_BUTTON_COLORS = ((GREENS[3], TANS[0]), ('#000000','#FFFFFF'),('#FFFFFF', '#
COLOR_SYSTEM_DEFAULT = '1234567890' # Colors should never be this long
DEFAULT_BUTTON_COLOR = ('white', BLUES[0]) # Foreground, Background (None, None) == System Default
# DEFAULT_BUTTON_COLOR = COLOR_SYSTEM_DEFAULT # Foreground, Background (None, None) == System Default
DEFAULT_ERROR_BUTTON_COLOR =("#FFFFFF", "#FF0000")
DEFAULT_CANCEL_BUTTON_COLOR = (GREENS[3], TANS[0])
DEFAULT_BACKGROUND_COLOR = None
DEFAULT_ELEMENT_BACKGROUND_COLOR = None
DEFAULT_TEXT_ELEMENT_BACKGROUND_COLOR = None
@ -646,9 +646,9 @@ class Button(Element):
self.ParentForm.Results[r][c] = True # mark this button's location in results
# if the form is tabbed, must collect all form's results and destroy all forms
if self.ParentForm.IsTabbedForm:
self.ParentForm.UberParent.Close()
self.ParentForm.UberParent._Close()
else:
self.ParentForm.Close()
self.ParentForm._Close()
self.ParentForm.TKroot.quit()
if self.ParentForm.NonBlocking:
self.ParentForm.TKroot.destroy()
@ -718,8 +718,6 @@ class ProgressBar(Element):
target_element = self.ParentForm.GetElementAtLocation(target)
strvar = target_element.TKStringVar
rc = strvar.set(self.TextToDisplay)
# update the progress bar counter
# self.TKProgressBar['value'] = self.CurrentValue
self.TKProgressBar.Update(current_count)
try:
@ -848,7 +846,7 @@ class FlexForm:
''' Parms are a variable number of Elements '''
NumRows = len(self.Rows) # number of existing rows is our row number
CurrentRowNumber = NumRows # this row's number
CurrentRow = Row(auto_size_text) # start with a blank row and build up
CurrentRow = Row(auto_size_text=auto_size_text) # start with a blank row and build up
# ------------------------- Add the elements to a row ------------------------- #
for i, element in enumerate(args): # Loop through list of elements and add them to the row
element.Position = (CurrentRowNumber, i)
@ -900,17 +898,17 @@ class FlexForm:
element = row.Elements[col_num]
return element
def GetDefaultElementSize(self):
def _GetDefaultElementSize(self):
return self.DefaultElementSize
def AutoCloseAlarmCallback(self):
def _AutoCloseAlarmCallback(self):
try:
if self.UberParent:
window = self.UberParent
else:
window = self
if window:
window.Close()
window._Close()
self.TKroot.quit()
self.RootNeedsDestroying = True
except:
@ -953,7 +951,7 @@ class FlexForm:
_my_windows.NumOpenWindows -= 1 * (_my_windows.NumOpenWindows != 0) # decrement if not 0
return BuildResults(self)
def Close(self):
def _Close(self):
try:
self.TKroot.update()
except: pass
@ -1008,10 +1006,10 @@ class UberForm():
def AddForm(self, form):
self.FormList.append(form)
def Close(self):
def _Close(self):
self.FormReturnValues = []
for form in self.FormList:
form.Close()
form._Close()
self.FormReturnValues.append(form.ReturnValues)
if not self.TKrootDestroyed:
self.TKrootDestroyed = True
@ -1033,8 +1031,8 @@ def Input(default_text ='', scale=(None, None), size=(None, None), auto_size_tex
return InputText(default_text=default_text, scale=scale, size=size, auto_size_text=auto_size_text)
# ------------------------- INPUT COMBO Element lazy functions ------------------------- #
def Combo(values, scale=(None, None), size=(None, None), auto_size_text=None):
return InputCombo(values=values, scale=scale, size=size, auto_size_text=auto_size_text)
def Combo(values, scale=(None, None), size=(None, None), auto_size_text=None, background_color=None):
return InputCombo(values=values, scale=scale, size=size, auto_size_text=auto_size_text, background_color=background_color)
def DropDown(values, scale=(None, None), size=(None, None), auto_size_text=None):
return InputCombo(values=values, scale=scale, size=size, auto_size_text=auto_size_text)
@ -1331,15 +1329,15 @@ def ConvertFlexToTK(MyFlexForm):
bc = MyFlexForm.ButtonColor
else:
bc = DEFAULT_BUTTON_COLOR
if bc == 'Random' or bc == 'random':
bc = GetRandomColorPair()
border_depth = element.BorderWidth
if btype != BUTTON_TYPE_REALTIME:
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height,command=element.ButtonCallBack, justify=tk.LEFT, foreground=bc[0], background=bc[1], bd=border_depth)
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height,command=element.ButtonCallBack, justify=tk.LEFT, bd=border_depth)
else:
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT, foreground=bc[0], background=bc[1], bd=border_depth)
tkbutton = tk.Button(tk_row_frame, text=btext, width=width, height=height, justify=tk.LEFT, bd=border_depth)
tkbutton.bind('<ButtonRelease-1>', element.ButtonReleaseCallBack)
tkbutton.bind('<ButtonPress-1>', element.ButtonPressCallBack)
if bc != (None, None) and bc != COLOR_SYSTEM_DEFAULT:
tkbutton.config(foreground=bc[0], background=bc[1])
element.TKButton = tkbutton # not used yet but save the TK button in case
wraplen = tkbutton.winfo_reqwidth() # width of widget in Pixels
if element.ImageFilename: # if button has an image on it
@ -1389,7 +1387,16 @@ def ConvertFlexToTK(MyFlexForm):
'fieldbackground': element.BackgroundColor,
'background': element.BackgroundColor}
}})
except: pass
except:
try:
combostyle.theme_settings('combostyle',
settings={'TCombobox':
{'configure':
{'selectbackground': element.BackgroundColor,
'fieldbackground': element.BackgroundColor,
'background': element.BackgroundColor}
}})
except: pass
# ATTENTION: this applies the new style 'combostyle' to all ttk.Combobox
combostyle.theme_use('combostyle')
element.TKCombo = ttk.Combobox(tk_row_frame, width=width, textvariable=element.TKStringVar,font=font )
@ -1602,7 +1609,7 @@ def ShowTabbedForm(title, *args, auto_close=False, auto_close_duration=DEFAULT_A
uber.FormReturnValues.append(form.ReturnValues)
# dangerous?? or clever? use the final form as a callback for autoclose
id = root.after(auto_close_duration * 1000, form.AutoCloseAlarmCallback) if auto_close else 0
id = root.after(auto_close_duration * 1000, form._AutoCloseAlarmCallback) if auto_close else 0
icon = fav_icon if not _my_windows.user_defined_icon else _my_windows.user_defined_icon
try: uber.TKroot.iconbitmap(icon)
except: pass
@ -1631,7 +1638,7 @@ def StartupTK(my_flex_form):
if my_flex_form.AutoClose:
duration = DEFAULT_AUTOCLOSE_TIME if my_flex_form.AutoCloseDuration is None else my_flex_form.AutoCloseDuration
my_flex_form.TKAfterID = root.after(duration * 1000, my_flex_form.AutoCloseAlarmCallback)
my_flex_form.TKAfterID = root.after(duration * 1000, my_flex_form._AutoCloseAlarmCallback)
if my_flex_form.NonBlocking:
my_flex_form.TKroot.protocol("WM_WINDOW_DESTROYED", my_flex_form.OnClosingCallback())
pass
@ -1766,7 +1773,7 @@ def MsgBoxError(*args, button_color=DEFAULT_ERROR_BUTTON_COLOR, auto_close=False
# ============================== MsgBoxCancel =====#
# #
# ===================================================#
def MsgBoxCancel(*args, button_color=DEFAULT_CANCEL_BUTTON_COLOR, auto_close=False, auto_close_duration=None, font=None):
def MsgBoxCancel(*args, button_color=None, auto_close=False, auto_close_duration=None, font=None):
'''
Display a MsgBox with a single "Cancel" button.
:param args:
@ -1782,7 +1789,7 @@ def MsgBoxCancel(*args, button_color=DEFAULT_CANCEL_BUTTON_COLOR, auto_close=Fal
# ============================== MsgBoxOK =====#
# Like MsgBox but only 1 button #
# ===================================================#
def MsgBoxOK(*args, button_color=('white', 'black'), auto_close=False, auto_close_duration=None, font=None):
def MsgBoxOK(*args, button_color=None, auto_close=False, auto_close_duration=None, font=None):
'''
Display a MsgBox with a single buttoned labelled "OK"
:param args:
@ -1908,7 +1915,7 @@ def ProgressMeterUpdate(bar, value, *args):
rc = bar.UpdateBar(value)
if value >= bar.MaxValue or not rc:
bar.BarExpired = True
bar.ParentForm.Close()
bar.ParentForm._Close()
if bar.ParentForm.RootNeedsDestroying:
try:
_my_windows.NumOpenWindows -= 1 * (_my_windows.NumOpenWindows != 0) # decrement if not 0
@ -2102,6 +2109,15 @@ def eprint(*args, size=(None,None), end=None, sep=None):
EasyPrint(*args, size=size, end=end, sep=sep)
def EasyPrint(*args, size=(None,None), end=None, sep=None):
global _easy_print_data
if _easy_print_data is None:
_easy_print_data = DebugWin(size=size)
_easy_print_data.Print(*args, end=end, sep=sep)
def EasyPrintold(*args, size=(None,None), end=None, sep=None):
if 'easy_print_data' not in EasyPrint.__dict__: # use a function property to save DebugWin object (static variable)
EasyPrint.easy_print_data = DebugWin(size=size)
if EasyPrint.easy_print_data is None:
@ -2111,7 +2127,7 @@ def EasyPrint(*args, size=(None,None), end=None, sep=None):
def EasyPrintClose():
if 'easy_print_data' in EasyPrint.__dict__:
if EasyPrint.easy_print_data is not None:
EasyPrint.easy_print_data.Close()
EasyPrint.easy_print_data._Close()
EasyPrint.easy_print_data = None
# del EasyPrint.easy_print_data
@ -2224,7 +2240,7 @@ def SetGlobalIcon(icon):
# ============================== SetOptions =========#
# Sets the icon to be used by default #
# ===================================================#
def SetOptions(icon=None, button_color=(None,None), element_size=(None,None), margins=(None,None),
def SetOptions(icon=None, button_color=None, element_size=(None,None), margins=(None,None),
element_padding=(None,None),auto_size_text=None, auto_size_buttons=None, font=None, border_width=None,
slider_border_width=None, slider_relief=None, slider_orientation=None,
autoclose_time=None, message_box_line_width=None,
@ -2271,8 +2287,8 @@ def SetOptions(icon=None, button_color=(None,None), element_size=(None,None), ma
raise FileNotFoundError
_my_windows.user_defined_icon = icon
if button_color != (None,None):
DEFAULT_BUTTON_COLOR = (button_color[0], button_color[1])
if button_color != None:
DEFAULT_BUTTON_COLOR = button_color
if element_size != (None,None):
DEFAULT_ELEMENT_SIZE = element_size