ROLLING BACK to Aug 10 before ListDict
This commit is contained in:
parent
b104c97a1e
commit
36b12763a6
|
@ -1,10 +1,10 @@
|
||||||
|
|
||||||
#!/usr/bin/env Python3
|
#!/usr/bin/env Python3
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import filedialog
|
from tkinter import filedialog
|
||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
import tkinter.scrolledtext as tkst
|
import tkinter.scrolledtext as tkst
|
||||||
import tkinter.font
|
import tkinter.font
|
||||||
from collections import OrderedDict
|
|
||||||
import datetime
|
import datetime
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
@ -14,7 +14,7 @@ DEFAULT_WINDOW_ICON = ''
|
||||||
DEFAULT_ELEMENT_SIZE = (45,1) # In CHARACTERS
|
DEFAULT_ELEMENT_SIZE = (45,1) # In CHARACTERS
|
||||||
DEFAULT_MARGINS = (10,5) # Margins for each LEFT/RIGHT margin is first term
|
DEFAULT_MARGINS = (10,5) # Margins for each LEFT/RIGHT margin is first term
|
||||||
DEFAULT_ELEMENT_PADDING = (5,3) # Padding between elements (row, col) in pixels
|
DEFAULT_ELEMENT_PADDING = (5,3) # Padding between elements (row, col) in pixels
|
||||||
DEFAULT_AUTOSIZE_TEXT = True
|
DEFAULT_AUTOSIZE_TEXT = False
|
||||||
DEFAULT_AUTOSIZE_BUTTONS = True
|
DEFAULT_AUTOSIZE_BUTTONS = True
|
||||||
DEFAULT_FONT = ("Helvetica", 10)
|
DEFAULT_FONT = ("Helvetica", 10)
|
||||||
DEFAULT_TEXT_JUSTIFICATION = 'left'
|
DEFAULT_TEXT_JUSTIFICATION = 'left'
|
||||||
|
@ -1143,37 +1143,6 @@ def EncodeRadioRowCol(row, col):
|
||||||
RadValue = row * 1000 + col
|
RadValue = row * 1000 + col
|
||||||
return RadValue
|
return RadValue
|
||||||
|
|
||||||
#===== ListDict - New data type for returning values =====
|
|
||||||
class ListDict(OrderedDict):
|
|
||||||
def __iter__(self):
|
|
||||||
for v in self.values():
|
|
||||||
yield v
|
|
||||||
|
|
||||||
def __getitem__(self, item):
|
|
||||||
if isinstance(item, slice):
|
|
||||||
return list(self.values())[item]
|
|
||||||
else:
|
|
||||||
return super().__getitem__(item)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
listlike = True
|
|
||||||
for i, key in enumerate(self.keys()):
|
|
||||||
if i != key:
|
|
||||||
listlike = False
|
|
||||||
|
|
||||||
if listlike:
|
|
||||||
return str(list(self.values()))
|
|
||||||
else:
|
|
||||||
output = [("'" + k + "'" if isinstance(k, str) else str(k)) + ': ' + (
|
|
||||||
"'" + v + "'" if isinstance(v, str) else str(v)) for k, v in self.items()]
|
|
||||||
return '{' + ', '.join(output) + '}'
|
|
||||||
|
|
||||||
def ToList(self):
|
|
||||||
output = []
|
|
||||||
for item in self.values():
|
|
||||||
output.append(item)
|
|
||||||
return output
|
|
||||||
|
|
||||||
# ------- FUNCTION BuildResults. Form exiting so build the results to pass back ------- #
|
# ------- FUNCTION BuildResults. Form exiting so build the results to pass back ------- #
|
||||||
# format of return values is
|
# format of return values is
|
||||||
# (Button Pressed, input_values)
|
# (Button Pressed, input_values)
|
||||||
|
@ -1187,8 +1156,7 @@ def BuildResults(form):
|
||||||
results=form.Results
|
results=form.Results
|
||||||
button_pressed_text = None
|
button_pressed_text = None
|
||||||
input_values = []
|
input_values = []
|
||||||
# input_values_dictionary = {}
|
input_values_dictionary = {}
|
||||||
input_values_dictionary = ListDict()
|
|
||||||
key_counter = 0
|
key_counter = 0
|
||||||
for row_num,row in enumerate(form.Rows):
|
for row_num,row in enumerate(form.Rows):
|
||||||
for col_num, element in enumerate(row):
|
for col_num, element in enumerate(row):
|
||||||
|
@ -1266,11 +1234,9 @@ def BuildResults(form):
|
||||||
value = 0
|
value = 0
|
||||||
results[row_num][col_num] = value
|
results[row_num][col_num] = value
|
||||||
input_values.append(value)
|
input_values.append(value)
|
||||||
if element.Key is None:
|
try:
|
||||||
input_values_dictionary[key_counter] = value
|
|
||||||
key_counter +=1
|
|
||||||
else:
|
|
||||||
input_values_dictionary[element.Key] = value
|
input_values_dictionary[element.Key] = value
|
||||||
|
except: pass
|
||||||
elif element.Type == ELEM_TYPE_INPUT_MULTILINE:
|
elif element.Type == ELEM_TYPE_INPUT_MULTILINE:
|
||||||
try:
|
try:
|
||||||
value=element.TKText.get(1.0, tk.END)
|
value=element.TKText.get(1.0, tk.END)
|
||||||
|
@ -1290,9 +1256,10 @@ def BuildResults(form):
|
||||||
input_values_dictionary.pop(None, None) # clean up dictionary include None was included
|
input_values_dictionary.pop(None, None) # clean up dictionary include None was included
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
# return values are always a list dictionary now (ordered dict with added features)
|
if not form.UseDictionary:
|
||||||
form.ReturnValues = button_pressed_text, input_values_dictionary
|
form.ReturnValues = button_pressed_text, input_values
|
||||||
|
else:
|
||||||
|
form.ReturnValues = button_pressed_text, input_values_dictionary
|
||||||
form.ReturnValuesDictionary = button_pressed_text, input_values_dictionary
|
form.ReturnValuesDictionary = button_pressed_text, input_values_dictionary
|
||||||
form.ResultsBuilt = True
|
form.ResultsBuilt = True
|
||||||
return form.ReturnValues
|
return form.ReturnValues
|
||||||
|
@ -2453,40 +2420,6 @@ def SetOptions(icon=None, button_color=None, element_size=(None,None), margins=(
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
#################### ChangeLookAndFeel #######################
|
|
||||||
# Predefined settings that will change the colors and styles #
|
|
||||||
# of the elements. #
|
|
||||||
##############################################################
|
|
||||||
def ChangeLookAndFeel(index):
|
|
||||||
# look and feel table
|
|
||||||
look_and_feel = {'GreenTan': {'BACKGROUND' : '#9FB8AD', 'TEXT': COLOR_SYSTEM_DEFAULT, 'INPUT':'#F7F3EC', 'BUTTON': ('white', '#475841'),
|
|
||||||
'PROGRESS':DEFAULT_PROGRESS_BAR_COLOR},
|
|
||||||
|
|
||||||
'LightGreen' :{'BACKGROUND' : '#B7CECE', 'TEXT': 'black', 'INPUT':'#FDFFF7', 'BUTTON': ('white', '#658268'), 'PROGRESS':('#247BA0','#F8FAF0')},
|
|
||||||
|
|
||||||
'BluePurple': {'BACKGROUND' : '#A5CADD', 'TEXT': '#6E266E', 'INPUT':'#E0F5FF', 'BUTTON': ('white', '#303952'),'PROGRESS':DEFAULT_PROGRESS_BAR_COLOR}}
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
colors = look_and_feel[index]
|
|
||||||
|
|
||||||
SetOptions(background_color=colors['BACKGROUND'],
|
|
||||||
text_element_background_color=colors['BACKGROUND'],
|
|
||||||
element_background_color=colors['BACKGROUND'],
|
|
||||||
text_color=colors['TEXT'],
|
|
||||||
input_elements_background_color=colors['INPUT'],
|
|
||||||
button_color=colors['BUTTON'],
|
|
||||||
progress_meter_color=colors['PROGRESS'],
|
|
||||||
border_width=0,
|
|
||||||
slider_border_width=0,
|
|
||||||
progress_meter_border_depth=0,
|
|
||||||
scrollbar_color=(colors['INPUT']),
|
|
||||||
element_text_color=colors['TEXT'])
|
|
||||||
except: # most likely an index out of range
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ============================== sprint ======#
|
# ============================== sprint ======#
|
||||||
# Is identical to the Scrolled Text Box #
|
# Is identical to the Scrolled Text Box #
|
||||||
# Provides a crude 'print' mechanism but in a #
|
# Provides a crude 'print' mechanism but in a #
|
||||||
|
@ -2508,16 +2441,16 @@ def ObjToString(obj, extra=' '):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
with FlexForm('Demo form..') as form:
|
with FlexForm('Demo form..', auto_size_text=True) as form:
|
||||||
form_rows = [[Text('You are running the PySimpleGUI.py file itself')],
|
form_rows = [[Text('You are running the PySimpleGUI.py file itself')],
|
||||||
[Text('You should be importing it rather than running it\n')],
|
[Text('You should be importing it rather than running it\n')],
|
||||||
[Text('Here is your sample input form....')],
|
[Text('Here is your sample input form....')],
|
||||||
[Text('Source Folder', size=(15, 1), justification='right'), InputText('Source', focus=True),FolderBrowse()],
|
[Text('Source Folder', size=(15, 1), auto_size_text=False, justification='right'), InputText('Source', focus=True),FolderBrowse()],
|
||||||
[Text('Destination Folder', size=(15, 1), justification='right'), InputText('Dest'), FolderBrowse()],
|
[Text('Destination Folder', size=(15, 1), auto_size_text=False, justification='right'), InputText('Dest'), FolderBrowse()],
|
||||||
[Submit(bind_return_key=True), Cancel()]]
|
[Submit(bind_return_key=True), Cancel()]]
|
||||||
|
|
||||||
button, (source, dest) = form.LayoutAndRead(form_rows)
|
button, (source, dest) = form.LayoutAndRead(form_rows)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
exit(69)
|
exit(69)
|
Loading…
Reference in New Issue