Changes for newest docstrings

This commit is contained in:
PySimpleGUI 2020-03-08 19:29:03 -04:00
parent 03aaa144a3
commit a53c04e0cf
11 changed files with 25238 additions and 5108 deletions

View File

@ -29,7 +29,7 @@ HOW DO I INSERT IMAGES ???
[![Downloads](http://pepy.tech/badge/pysimplegui)](http://pepy.tech/project/pysimplegui) tkinter
[![Downloads ](https://pepy.tech/badge/pysimplegui27)](https://pepy.tech/project/pysimplegui27) tkinter 2.7 (WARNING - DISAPPEARING Entirely on 12/31/2019!!!)
[![Downloads ](https://pepy.tech/badge/pysimplegui27)](https://pepy.tech/project/pysimplegui27) tkinter 2.7
[![Downloads](https://pepy.tech/badge/pysimpleguiqt)](https://pepy.tech/project/pysimpleguiqt) Qt
@ -42,8 +42,7 @@ HOW DO I INSERT IMAGES ???
![Awesome Meter](https://img.shields.io/badge/Awesome_meter-100-yellow.svg)
![Python Version](https://img.shields.io/badge/Python-2.7_3.x-yellow.svg)
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.13.1-red.svg?longCache=true&style=for-the-badge)
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-2.4.1-blue.svg?longCache=true&style=for-the-badge)
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.16.0-red.svg?longCache=true&style=for-the-badge)
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0.30.0-orange.svg?longCache=true&style=for-the-badge)
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_version-0.14.0-orange.svg?longCache=true&style=for-the-badge)
@ -74,7 +73,7 @@ pip3 install pysimplegui
```python
import PySimpleGUI as sg
sg.change_look_and_feel('DarkAmber') # Add a touch of color
sg.theme('DarkAmber') # Add a touch of color
# All the stuff inside your window.
layout = [ [sg.Text('Some text on Row 1')],
[sg.Text('Enter something on Row 2'), sg.InputText()],
@ -317,7 +316,7 @@ This makes the coding process extremely quick and the amount of code very small
```python
import PySimpleGUI as sg
sg.change_look_and_feel('DarkAmber') # Add a little color to your windows
sg.theme('DarkAmber') # Add a little color to your windows
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [ [sg.Text('Some text on Row 1')],
[sg.Text('Enter something on Row 2'), sg.InputText()],
@ -788,7 +787,7 @@ Creating and reading the user's inputs for the window occupy the last 2 lines of
```python
import PySimpleGUI as sg
sg.change_look_and_feel('Dark Blue 3') # please make your creations colorful
sg.theme('Dark Blue 3') # please make your creations colorful
layout = [ [sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
@ -893,9 +892,9 @@ Your program have 2 or 3 windows and you're concerned? Below you'll see 11 wind
![pyplot 1](https://user-images.githubusercontent.com/13696193/44683336-11d46480-aa14-11e8-9d6c-f656796fc915.jpg)
Just because you can't match a pair of socks doesn't mean your windows have to all look the same gray color. Choose from over 100 different "Themes". Add 1 line call to `change_look_and_feel` to instantly transform your window from gray to something more visually pleasing to interact with. If you mispell the theme name badly or specify a theme name is is missing from the table of allowed names, then a theme will be randomly assigned for you. Who knows, maybe the theme chosen you'll like and want to use instead of your original plan.
Just because you can't match a pair of socks doesn't mean your windows have to all look the same gray color. Choose from over 100 different "Themes". Add 1 line call to `theme` to instantly transform your window from gray to something more visually pleasing to interact with. If you mispell the theme name badly or specify a theme name is is missing from the table of allowed names, then a theme will be randomly assigned for you. Who knows, maybe the theme chosen you'll like and want to use instead of your original plan.
In PySimpleGUI release 4.6 the number of themes was dramatically increased from a couple dozen to over 100. To use the color schemes shown in the window below, add a call to `change_look_and_feel('Theme Name)` to your code, passing in the name of thd desired color theme. To see this window and the list of available themes on your releeae of softrware, call the function `preview_all_look_and_feel_themes()`. This will create a window with the frames like those below. It will shows you exactly what's available in your version of PySimpleGUI.
In PySimpleGUI release 4.6 the number of themes was dramatically increased from a couple dozen to over 100. To use the color schemes shown in the window below, add a call to `theme('Theme Name)` to your code, passing in the name of thd desired color theme. To see this window and the list of available themes on your releeae of softrware, call the function `theme_previewer()`. This will create a window with the frames like those below. It will shows you exactly what's available in your version of PySimpleGUI.
In release 4.9 another 32 Color Themes were added... here are the current choices

File diff suppressed because it is too large Load Diff

View File

@ -1038,6 +1038,94 @@ Table and Tree header colors, expanded Graph methods
* Test Harness sets incorrect look and feel on purpose so a random one is chosen
## 4.14.0 PySimpleGUI 23-Dec-2019
THEMES!
* theme is replacing change_look_and_feel. The old calls will still be usable however
* LOTS of new theme functions. Search for "theme_" to find them in this documentation. There's a section discussing themes too
* "Dark Blue 3" is the default theme now. All windows will be colored using this theme unless the user sets another one
* Removed the code that forced Macs to use gray
* New element.set_cursor - can now set a cursor for any of the elements. Pass in a cursor string and cursor will appear when mouse over widget
* Combo - enable setting to any value, not just those in the list
* Combo - changed how initial value is set
* Can change the font on tabs by setting font parameter in TabGroup
* Table heading font now defaults correctly
* Tree heading font now defaults correctly
* Renamed DebugWin to _DebugWin to discourage use
## 4.15.0 PySimpleGUI 08-Jan-2020
Dynamic Window Layouts! Extend your layouts with `Window.extend_layout`
Lots of fixes
* Window.extend_layout
* Graph.change_coordinates - realtime change of coordinate systems for the Graph element
* theme_text_element_background_color - new function to expose this setting
* Radio & Checkbox colors changed to be ligher/darker than background
* Progress bar - allow updates of value > max value
* Output element does deletes now so that cleanup works. Can use in multiple windows as a result
* DrawArc (draw_arc) - New width / line width parameter
* RGB does more error checking, converts types
* More descriptive errors for find element
* popup_error used interally now sets keep on top
* Element Re-use wording changed so that it's clear the element is the problem not the layout when re-use detected
* Window.Close (Window.close) - fix for not immediately seeing the window disappear on Linux when clicking "X"
* Window.BringToFront (bring_to_front) - on Windows needed to use topmost to bring window to front insteade of lift
* Multiline Scrollbar - removed the scrollbar color. It doesn't work on Windows so keeping consistent
* Changed how Debug Windows are created. Uses finalize now instead of the read non-blocking
* Fix for Debug Window being closed by X causing main window to also close
* Changed all "black" and "white" in the Look and Feel table to #000000 and #FFFFFF
* Added new color processing functions for internal use (hsl and hsv related)
* popup - extended the automatic wrapping capabilities to messages containing \n
* Test harness uses a nicer colors for event, value print outs.
* _timeit decorator for timing functions
## 4.15.1 PySimpleGUI 09-Jan-2020
Quick patch to remove change to popup
## 4.15.2 PySimpleGUI 15-Jan-2020
Quick patch to remove f-string for 3.5 compat.
## 4.16.0 PySimpleGUI 08-Jan-2020
The "LONG time coming" release. System Tray, Read with close + loads more changes
Note - there is a known problem with the built-in debugger created when the new read with close was added
* System Tray - Simulates the System Tray feature currently in PySimpleGUIWx and PySimpleGUIQt. All calls are the same. The icon is located just above the system tray (bottom right corner)
* Window.read - NEW close parameter will close the window for you after the read completes. Can make a single line window using this
* Window.element_list - Returns a list of all elements in the window
* Element.unbind - can remove a previously created binding
* Element.set_size - retries using "length" if "height" setting fails
* Listbox.update - select_mode parameter added
* Listbox.update - no longer selects the first entry when all values are changed
* Listbox.get - new. use to get the current values. Will be the same as the read return dictionary
* Checkbox.update - added ability to change background and text colors. Uses the same combuted checkbox background color (may remove)
* Multiline.update - fix for when no value is specified
* Multiline - Check for None when creating. Ignores None rather than converting to string
* Text.update - added changing value to string. Assumed caller was passing in string previously.
* Text Element - justification can be specified with a single character. l=left, r=right, c=center. Previously had to fully spell out
* Input Element - justification can be specified with a single character. l=left, r=right, c=center. Previously had to fully spell out
* StatusBar Element - justification can be specified with a single character. l=left, r=right, c=center. Previously had to fully spell out
* Image Element - can specify no image when creating. Previously gave a warning and required filename = '' to indicate nothing set
* Table Element - justification can be specified as an "l" or "r" instead of full word left/right
* Tree Element - justification can be specified as an "l" or "r" instead of full word left/right
* Graph.draw_point - changed to using 1/2 the size rather than size. Set width = 0 so no outline will be drawn
* Graph.draw_polygon - new drawing method! Can now draw polygons that fill
* Layout error checking and reporting added for - Frame, Tab, TabGroup, Column, Window
* Menu - Ability to set the font for the menu items
* Debug window - fix for problem closing using the "Quit" button
* print_to_element - print-like call that can be used to output to a Multiline element as if it is an Output element
### Upcoming
There will always be overlapping work as the ports will never actually be "complete" as there's always something new that can be built. However there's a definition for the base functionality for PySimpleGUI. This is what is being strived for with the currnt ports that are underway.

16233
readme_creator/OUTPUT.txt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,9 @@
from inspect import getmembers, isfunction, isclass, getsource, signature, _empty, isdatadescriptor
from datetime import datetime
import PySimpleGUIlib
import click
import logging
import json
import re
import os
import PySimpleGUIlib, click, textwrap, logging, json, re, os
from collections import namedtuple
triplet = namedtuple('triplet', 'name value atype'.split(' '))
########################################################
# _ _ _ #
@ -18,18 +16,9 @@ import os
# |_| #
########################################################
TAB_char = ' '
TABLE_TEMPLATE='''
Parameter Descriptions:
|Name|Meaning|
|---|---|
{md_table}
{md_return}
'''
TABLE_ROW_TEMPLATE = '|{name}|{desc}|'
TABLE_RETURN_TEMPLATE = '|||\n| **return** | {return_guy} |'
TABLE_Only_table_RETURN_TEMPLATE = '''|Name|Meaning|\n|---|---|\n| **return** | $ |''' # $ - is the part for return value
TABLE_RETURN_TEMPLATE = '|||\n|| **return** | {} |'
TABLE_Only_table_RETURN_TEMPLATE = '''|Type|Name|Meaning|\n|---|---|---|\n|<type>| **return** | $ |''' # $ - is the part for return value
##############################################################################
# _ _ #
@ -89,67 +78,20 @@ CLASS
}
"""
def get_params_part(code: str, versbose=True) -> dict:
"""
Find ":param " part in given "doc string".
from __doc__ to {
'parameter' : 'desctiption',
'parameter2' : 'desctiption2',
'parameter3' : 'desctiption3',
}
"""
code = code.strip()
# if doc_string is empty
if code == None or code == '' or ':param' not in code:
return {}
elif ':return' in code: # strip ':return:'
new_code = code[:code.index(':return:')]
regg_ = re.compile(r':return[\d\D]*?:param', flags=re.MULTILINE)
if len(list(regg_.finditer(new_code))) > 0:
if versbose:
print(f'warning-> ":return" MUST BY AT THE END. FIX IT NOW in "{code}"!!!\nBut i will try to parse it...')
code = re.sub(regg_, r':param', code)
else:
code = new_code
try:
only_params = code[code.index(':param'):] # get_only_params_string(code)
except Exception as e:
if versbose:
print(f'SORRY, fail at parsing that stuff in "{code}"')
return {}
# making dict
param_lines = only_params.split(':param ')
param_lines = [re.sub(r'[ ]{2,}', ' ', i.strip(' ').strip('\t').replace('\n', ' '), flags=re.MULTILINE)
for i in param_lines if i.strip()] # filter empty lines
args_kwargs_pairs = {}
for i in param_lines:
cols = i.split(':')
param_name, els = cols[0], '\n'.join(
[j.strip() for j in ':'.join(cols[1:]).split('\n')])
# param_name, els = cols[0], ' '.join([j.strip() for j in ':'.join(cols).split('\n')]) # can be this:
param_name, els = param_name.strip(), els.strip()
args_kwargs_pairs[param_name] = els
return args_kwargs_pairs
def get_return_part(code: str, line_break=None) -> str:
""" Find ":return:" part in given "doc string"."""
if not line_break:
line_break = ' <br> '
# line_break = ' <br> '
line_break = ''
if ':return:' not in code:
return ''
return code[code.index(':return:')+len(':return:'):].strip().replace('\n', line_break)
only_return = code[code.index(':return:')+len(':return:'):].strip().replace('\n', line_break)
if ':rtype' in only_return:
only_return = only_return.split(':rtype')[0]
return only_return
def special_cases(function_name, function_obj, sig, doc_string, line_break=None):
@ -274,8 +216,14 @@ def get_doc_desc(doc, original_obj):
def is_propery(func):
return isdatadescriptor(func) and not isfunction(func)
def get_sig_table_parts(function_obj, function_name, doc_string, logger=None, is_method=False, line_break=None, insert_md_section_for__class_methods=False):
""" Convert "function + __doc__" tp "method call + params table" in MARKDOWN """
def get_sig_table_parts(function_obj, function_name, doc_string,
logger=None, is_method=False, line_break=None,
insert_md_section_for__class_methods=False):
"""
Convert python object "function + __doc__"
to
"method call + params table" in MARKDOWN
"""
doc_string = doc_string.strip()
# qpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqp
# 0 0 Making INIT_CALL 0 0 #
@ -287,32 +235,29 @@ def get_sig_table_parts(function_obj, function_name, doc_string, logger=None, is
except Exception as e:
if logger: logger.error(f'PROBLEM WITH "{function_obj}" "{function_name}":\nit\'s signature is BS. Ok, I will just return \'\' for \'signature\' and \'param_table\'\nOR BETTER - delete it from the 2_readme.md.\n======')
return '', ''
if not is_propery(function_obj):
for key in sig:
val = sig[key].default
if 'self' == str(key):
continue
if val == _empty: rows.append(key)
elif val == None: rows.append(f'{key}=None')
elif type(val) is int: rows.append(f'{key}={val}')
elif type(val) is str: rows.append(f'{key}="{val}"')
elif type(val) is tuple: rows.append(f'{key}={val}')
elif type(val) is bool: rows.append(f'{key}={val}')
elif type(val) is bytes: rows.append(f'{key}=...')
if 'self' == str(key): continue
elif key == 'args': rows.append('args=*<1 or N object>')
elif val == _empty: rows.append(key)
elif val == None: rows.append(f'{key}=None')
elif type(val) in (int, float): rows.append(f'{key}={val}')
elif type(val) is str: rows.append(f'{key}="{val}"')
elif type(val) is tuple: rows.append(f'{key}={val}')
elif type(val) is bool: rows.append(f'{key}={val}')
elif type(val) is bytes: rows.append(f'{key}=...')
else:
raise Exception(f'IDK this type -> {key, val}')
sig_content = f',\n{TAB_char}'.join(rows) if len(rows) > 2 else f', '.join(rows) if rows else ''
# # # make 2 line signature into 1-line
# # # sig_content = f',\n{TAB_char}'.join(rows)
# # # if sig_content.count('\n') < 3: sig_content = re.sub(r'\n[ \t]{,8}', ' ', sig_content, flags=re.MULTILINE)
sign = "\n\n{0}\n\n```\n{1}({2})\n```".format(get_doc_desc(doc_string, function_obj), function_name, sig_content)
if is_method:
if insert_md_section_for__class_methods:
# sign = "#### {1}\n\n{0}\n\n```\n{1}({2})\n```".format(get_doc_desc(doc_string, function_obj), function_name, sig_content)
sign = "\n\n{0}\n\n```\n{1}({2})\n```".format(get_doc_desc(doc_string, function_obj), function_name, sig_content)
else:
sign = "{0}\n\n```\n{1}({2})\n```".format(get_doc_desc(doc_string, function_obj), function_name, sig_content)
@ -334,25 +279,89 @@ def get_sig_table_parts(function_obj, function_name, doc_string, logger=None, is
if not return_guy:
md_return = return_guy = ''
else:
return_guy = return_guy.strip()
md_return = TABLE_RETURN_TEMPLATE.format(return_guy=return_guy)
# return_guy = f'\n\nreturn value: {return_guy}\n'
# return_guy_val_str = return_guy
md_return = TABLE_RETURN_TEMPLATE.format(return_guy.strip())
# 2
md_table = '\n'.join([TABLE_ROW_TEMPLATE.format(name=name, desc=desc)
for name, desc in
get_params_part(doc_string).items()])
def make_md_table_from_docstring(docstring):
# print(f'docstring = {docstring}')
# print(f'docstring = {type(docstring)}')
row_n_type_regex = re.compile(r':param ([\s\S]*?):([\s\S]*?):type [\s\S]*?:([\d\D]*?)\n', flags=re.M|re.DOTALL)
# row_n_type_regex = re.compile(r':param ([\d\w]+):([\d\D]*?):type [\w\d]+:([\d\D].*?)$', flags=re.M|re.DOTALL)
'''replace WITH regex'''
def replace_re(i, a=r' ',z=' '): return re.sub(a,z,i, flags=re.MULTILINE).strip()
def process_type(txt):
'''
striping brackets () from txt:
Example:
(str) -> str
Union[str, Tuple[str, int]] -> Union[str, Tuple[str, int]]
'''
if re.compile(r'\(\s?\w+\s?\)', flags=re.M|re.DOTALL).match(txt):
return txt.rstrip(')').lstrip('(')
else:
return txt
# if 'led by application to change the tooltip text for an Element. Normally invoked using ' in docstring:
# pass
# print(123)
# |> find PARAM, PARAM_TYPE, PARAM_DESCRIPTIONe
trips = [triplet( i.group(1), replace_re(i.group(2), r'\s{2,}', ' '), process_type(i.group(3).strip()))
for index, i in enumerate(re.finditer(row_n_type_regex, docstring + ' \n'))]
if not trips:
raise Exception('no _TRIPs found!')
# ===|> format markdown table
# ---------------------------
# ROW template:
max_type_width, max_name_width = 20, 20
try:
max_type_width, max_name_width = max([len(i.atype) for i in trips]), max([len(i.name) for i in trips])
except Exception as e:
pass
row_template = f'| {{: ^{max_type_width}}} | {{: ^{max_name_width}}} | {{}} |'
# rows, and finally table.
rows = [row_template.format(i.atype, i.name, i.value) for i in trips]
row_n_type_regex = re.compile(r':param ([\d\w\*\s]+):([\d\D]*?):type [\w\d]+:([\d\D].*?)\n', flags=re.M|re.DOTALL)
try: # try to get return value
# return_regex = re.compile(r':return:\s*(.*?):rtype:\s*(.*?)\n', flags=re.M|re.DOTALL)
regex_pattern = re.compile(r':return:\s*(.*?)\n\s*:rtype:\s*(.*?)\n', flags=re.M|re.DOTALL)
a_doc = docstring + ' \n'
aa = list(re.finditer(regex_pattern, a_doc))[0]
text, atype = aa.group(1).strip(), aa.group(2).strip()
rows.append(f'| {atype} | **RETURN** | {text}')
except Exception as e:
print(e)
# print(f'docstring = {docstring}')
pass
header = '\nParameter Descriptions:\n\n|Type|Name|Meaning|\n|--|--|--|\n'
md_table = header+'\n'.join(rows)
# md_table = '\n'.join(rows)
return md_table
# md_table = '\n'.join([TABLE_ROW_TEMPLATE.format(name=name, desc=desc)
# for name, desc in
# get_params_part(doc_string).items()])
# 3
params_TABLE = TABLE_TEMPLATE.format(md_table=md_table, md_return=md_return).replace(TAB_char, '').replace(' ', '').replace('\t', '')
# 1 and N
# if len(get_params_part(doc_string).items()) == 1:
# params_TABLE = TABLE_TEMPLATE.replace('Parameters Descriptions:', 'Parameter Description:').format(md_table=md_table, md_return=md_return).replace(TAB_char, '').replace(' ', '').replace('\t', '')
# else:
# params_TABLE = TABLE_TEMPLATE.format(md_table=md_table, md_return=md_return).replace(TAB_char, '').replace(' ', '').replace('\t', '')
try:
params_TABLE = md_table = make_md_table_from_docstring(doc_string)
except Exception as e:
params_TABLE = md_table = ''
if not md_table.strip():
params_TABLE = ''
@ -363,7 +372,8 @@ def get_sig_table_parts(function_obj, function_name, doc_string, logger=None, is
return sign, params_TABLE
def pad_n(text): return f'\n{text}\n'
def pad_n(text):
return f'\n{text}\n'
def render(injection, logger=None, line_break=None, insert_md_section_for__class_methods=False):
@ -402,7 +412,18 @@ def readfile(fname):
return ff.read()
def main(do_full_readme=False, files_to_include: list = [], logger:object=None, output_name:str=None, delete_html_comments:bool=True, delete_x3_newlines:bool=True, allow_multiple_tags:bool=True, line_break:str=None, insert_md_section_for__class_methods:bool=True, remove_repeated_sections_classmethods:bool=False, output_repeated_tags:bool=False, skip_dunder_method:bool=True):
def main(do_full_readme=False,
files_to_include: list = [],
logger:object=None,
output_name:str=None,
delete_html_comments:bool=True,
delete_x3_newlines:bool=True,
allow_multiple_tags:bool=True,
line_break:str=None,
insert_md_section_for__class_methods:bool=True,
remove_repeated_sections_classmethods:bool=False,
output_repeated_tags:bool=False,
skip_dunder_method:bool=True):
"""
Goal is:
1) load 1_.md 2_.md 3_.md 4_.md
@ -430,11 +451,9 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
# 888888888888888888888888888888888888888888
# =========== 1 loading files =========== #
# 888888888888888888888888888888888888888888
readme = readfile('2_readme.md')
# 8888888888888888888888888888888888888888888888888888888888888888888888888
# =========== 2 GET classes, funcions, varialbe a.k.a. memes =========== #
# 8888888888888888888888888888888888888888888888888888888888888888888888888
readme = readfile('2_readme.md')
def valid_field(pair):
bad_fields = 'LOOK_AND_FEEL_TABLE copyright __builtins__ icon'.split(' ')
@ -449,13 +468,15 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
return False
return True
psg_members = [i for i in getmembers(PySimpleGUIlib) if valid_field(i)] # variables, functions, classes
# psg_members = getmembers(PySimpleGUIlib) # variables, functions, classes
psg_funcs = [o for o in psg_members if isfunction(o[1])] # only functions
psg_classes = [o for o in psg_members if isclass(o[1])] # only classes
psg_classes_ = list(set([i[1] for i in psg_classes])) # boildown B,Btn,Butt -into-> Button
psg_classes = list(zip([i.__name__ for i in psg_classes_], psg_classes_))
# psg_props = [o for o in psg_members if type(o[1]).__name__ == 'property']
# 8888888888888888888888888888888888888888888888888888888
# =========== 3 find all tags in 2_readme =========== #
# 8888888888888888888888888888888888888888888888888888888
@ -478,14 +499,17 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
# 8888888888888888888888888888888888888888888888888888888
# >1 REMOVE HEADER
started_mark = '<!-- Start from here -->'
if started_mark in readme:
readme = readme[readme.index(started_mark)+len(started_mark):]
readme = readme.split('<!-- Start from here -->')[1]
# readme = re.sub(r'([\d\D]*)<!-- Start from here -->', '', readme, flags=re.MULTILINE)
# 2> find good tags
re_tags = re.compile(r'<!-- <\+[a-zA-Z_]+[\d\w_]*\.([a-zA-Z_]+[\d\w_]*)\+> -->')
mark_points = [i for i in readme.split('\n') if re_tags.match(i)]
special_dunder_methods = ['init', 'repr', 'str', 'next']
# 3> find '_' tags OPTION
if skip_dunder_method:
@ -511,8 +535,10 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
injection_points = []
classes_method_tags = [j for j in mark_points if 'func.' not in j]
func_tags = [j for j in mark_points if 'func.' in j]
# 0===0 functions 0===0
for tag in func_tags:
@ -618,11 +644,20 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
# SPECIAL CASE: X.doc tag
if injection['part2'] == 'doc':
readme = readme.replace(injection['tag'], injection['parent_class'].__doc__)
a_tag = injection['tag']
print(f'a_tag = {a_tag}')
print(f'a_tag = {type(a_tag)}')
doc_ = '' if not injection['parent_class'].__doc__ else injection['parent_class'].__doc__
# if doc_ == None or a_tag == None:
# import pdb; pdb.set_trace();
readme = readme.replace(a_tag, doc_)
else:
content = render(injection, logger=logger, line_break=line_break,
insert_md_section_for__class_methods=insert_md_section_for__class_methods,)
insert_md_section_for__class_methods=insert_md_section_for__class_methods)
tag = injection["tag"]
if content:
@ -632,6 +667,9 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
readme = readme.replace(tag, content)
bad_part = '''\n\nParameter Descriptions:\n\n|Type|Name|Meaning|\n|--|--|--|\n\n'''
readme = readme.replace(bad_part, '\n')
# 2> log some data
if logger:
success_tags_str = '\n'.join(success_tags).strip()
@ -645,6 +683,8 @@ def main(do_full_readme=False, files_to_include: list = [], logger:object=None,
logger.info(good_message)
logger.info(bad_message)
print(123)
# 8888888888888888888888888888888888
# =========== 6 join =========== #

166
readme_creator/params.txt Normal file
View File

@ -0,0 +1,166 @@
:param .*?\n\s*:para
:param size: (w,h) w=characters-wide, h=rows-high
:type size: Tuple[int, int]
:param file_types: List of extensions to show using wildcards. All files (the default) = (("ALL Files", "*.*"),)
:type file_types: Tuple[Tuple[str,str]]
:param yes_no: If True, displays Yes and No buttons instead of Ok
:type yes_no: (bool)
:param keep_on_top: If True the window will remain above all current windows
:type keep_on_top: (bool)
===============
:param *args: Variable number of items to display
:type *args: (Any)
:param title: Title to display in the window.
:type title: (str)
:param button_type: Determines which pre-defined buttons will be shown (Default value = POPUP_BUTTONS_OK).
:type button_type: (enum)
:param button_color: button color (foreground, background)
:type button_color: Tuple[str, str]
:param background_color: color of background
:type background_color: (str)
:param text_color: color of the text
:type text_color: (str)
:param auto_close: if True window will close itself
:type auto_close: (bool)
:param auto_close_duration: Older versions only accept int. Time in seconds until window will close
:type auto_close_duration: Union[int, float]
:param non_blocking: if True the call will immediately return rather than waiting on user input
:type non_blocking: (bool)
:param icon: filename or base64 string to be used for the window's icon
:type icon: Union[bytes, str]
:param line_width: Width of lines in characters
:type line_width: (int)
:param font: specifies the font family, size, etc
:type font: Union[str, Tuple[str, int]]
:param no_titlebar: If True no titlebar will be shown
:type no_titlebar: (bool)
:param grab_anywhere: If True: can grab anywhere to move the window (Default = False)
:type grab_anywhere: (bool)
:param keep_on_top: If True the window will remain above all current windows
:type keep_on_top: (bool)
:param location: Location of upper left corner of the window
:type location: Tuple[int, int]
:return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY]
:param pad: Amount of padding to put around element in pixels (left/right, top/bottom)
:type pad: (int, int) or ((int,int),(int,int))
===============================
===============================
===============================
===============================
:param message: message displayed to user
:type message: (str)
:param title: Window title
:type title: (str)
:param default_path: path to display to user as starting point (filled into the input field)
:type default_path: (str)
:param no_window: if True, no PySimpleGUI window will be shown. Instead just the tkinter dialog is shown
:type no_window: (bool)
:param size: (width, height) of the InputText Element
:type size: Tuple[int, int]
:param button_color: button color (foreground, background)
:type button_color: Tuple[str, str]
:param background_color: color of background
:type background_color: (str)
:param text_color: color of the text
:type text_color: (str)
:param icon: filename or base64 string to be used for the window's icon
:type icon: Union[bytes, str]
:param font: specifies the font family, size, etc
:type font: Union[str, Tuple[str, int]]
:param no_titlebar: If True no titlebar will be shown
:type no_titlebar: (bool)
:param grab_anywhere: If True: can grab anywhere to move the window (Default = False)
:type grab_anywhere: (bool)
:param keep_on_top: If True the window will remain above all current windows
:type keep_on_top: (bool)
:param location: Location of upper left corner of the window
:type location: Tuple[int, int]
:param initial_folder: location in filesystem to begin browsing
:type initial_folder: (str)
:return: string representing the path chosen, None if cancelled or window closed with X
:rtype: Union[str, None]
:param message: message displayed to user
:type message: (str)
:param title: Window title
:type title: (str)
:param default_path: path to display to user as starting point (filled into the input field)
:type default_path: (str)
:param default_extension: If no extension entered by user, add this to filename (only used in saveas dialogs)
:type default_extension: (str)
:param save_as: if True, the "save as" dialog is shown which will verify before overwriting
:type save_as: (bool)
:param multiple_files: if True, then allows multiple files to be selected that are returned with ';' between each filename
:type multiple_files: (bool)
:param file_types: List of extensions to show using wildcards. All files (the default) = (("ALL Files", "*.*"),)
:type file_types: Tuple[Tuple[str,str]]
:param no_window: if True, no PySimpleGUI window will be shown. Instead just the tkinter dialog is shown
:type no_window: (bool)
:param size: (width, height) of the InputText Element
:type size: Tuple[int, int]
:param button_color: Color of the button (text, background)
:type button_color: Tuple[str, str]
:param background_color: background color of the entire window
:type background_color: (str)
:param text_color: color of the text
:type text_color: (str)
:param icon: filename or base64 string to be used for the window's icon
:type icon: Union[bytes, str]
:param font: specifies the font family, size, etc
:type font: Union[str, Tuple[str, int]]
:param no_titlebar: If True no titlebar will be shown
:type no_titlebar: (bool)
:param grab_anywhere: If True: can grab anywhere to move the window (Default = False)
:type grab_anywhere: (bool)
:param keep_on_top: If True the window will remain above all current windows
:type keep_on_top: (bool)
:param location: Location of upper left corner of the window
:type location: Tuple[int, int]
:param initial_folder: location in filesystem to begin browsing
:type initial_folder: (str)
:return: string representing the file(s) chosen, None if cancelled or window closed with X
:rtype: Union[str, None]
=====================================
=====================================
=====================================
:param title: text to display in eleemnt
:type title: (str)
:param current_value: current value
:type current_value: (int)
:param max_value: max value of QuickMeter
:type max_value: (int)
:param key: Used with window.FindElement and with return values to uniquely identify this element
:type key: Union[str, int, tuple]
:param *args: stuff to output
:type *args: (Any)
:param orientation: 'horizontal' or 'vertical' ('h' or 'v' work) (Default value = 'vertical' / 'v')
:type orientation: (str)
:param bar_color: color of a bar line
:type bar_color: str
:param button_color: button color (foreground, background)
:type button_color: Tuple[str, str]
:param size: (w,h) w=characters-wide, h=rows-high (Default value = DEFAULT_PROGRESS_BAR_SIZE)
:type size: Tuple[int, int]
:param border_width: width of border around element
:type border_width: (int)
:param grab_anywhere: If True: can grab anywhere to move the window (Default = False)
:type grab_anywhere: (bool)

File diff suppressed because it is too large Load Diff

View File

@ -92,7 +92,6 @@ if method == 'with logs':
########################################
if enable_popup:
import PySimpleGUI as sg
sg.change_look_and_feel('Dark Green 2')
lines = open('usage.log.txt', mode='r').readlines()
sg.PopupScrolled('Completed making {}'.format(OUTPUT_FILENAME), ''.join(lines), size=(80,50))

View File

@ -6,36 +6,58 @@ import PySimpleGUIlib
Will output to STDOUT all of the different tags for classes, members and functions for a given PySimpleGUIlib.py
file. Functions that begin with _ are filtered out from the list.
Displays the results in a PySimpleGUI window which can be used to copy and paste into other places.
"""
PySimpleGUIlib.theme('Dark Green 2')
layout = [[PySimpleGUIlib.Output(size=(80,50))]]
layout = [[PySimpleGUIlib.Output(size=(80,40))]]
window = PySimpleGUIlib.Window('Dump of tags', layout, resizable=True).Finalize()
psg_members = inspect.getmembers(PySimpleGUIlib)
psg_funcs = [o for o in psg_members if inspect.isfunction(o[1])]
SHOW_UNDERSCORE_METHODS = not False
def valid_field(pair):
bad_fields = 'LOOK_AND_FEEL_TABLE copyright __builtins__'.split(' ')
bad_prefix = 'TITLE_ TEXT_ ELEM_TYPE_ DEFAULT_ BUTTON_TYPE_ LISTBOX_SELECT METER_ POPUP_ THEME_'.split(' ')
field_name, python_object = pair
if type(python_object) is bytes:
return False
if field_name in bad_fields:
return False
if any([i for i in bad_prefix if field_name.startswith(i)]):
return False
return True
psg_members = [i for i in inspect.getmembers(PySimpleGUIlib) if valid_field(i)]
psg_funcs = [o[0] for o in psg_members if inspect.isfunction(o[1])]
psg_classes = [o for o in psg_members if inspect.isclass(o[1])]
# psg_props = [o for o in psg_members if type(o[1]).__name__ == 'property']
# I don't know how this magic filtering works, I just know it works. "Private" stuff (begins with _) are somehow
# excluded from the list with the following 2 lines of code. Very nicely done Kol-ee-ya!
psg_classes_ = list(set([i[1] for i in psg_classes])) # filtering of anything that starts with _ (methods, classes, etc)
psg_classes = list(zip([i.__name__ for i in psg_classes_], psg_classes_))
psg_classes = sorted(list(set([i[1] for i in psg_classes])), key=lambda x : x.__name__) # filtering of anything that starts with _ (methods, classes, etc)
for i in sorted(psg_classes):
if 'Tk' in i[0] or 'TK' in i[0] or 'Element' == i[0]: # or 'Window' == i[0]:
for aclass in psg_classes:
class_name = aclass.__name__
if 'Tk' in class_name or 'TK' in class_name or 'Element' == class_name: # or 'Window' == class_name:
continue
print(f'## {i[0]} Element')
print('')
print(f'<!-- <+{i[0]}.doc+> -->')
print(f'<!-- <+{i[0]}.__init__+> -->')
print('')
print('\n'.join([f"### {j[0]}\n\n<!-- <+{i[0]}.{j[0]}+> -->\n" for j in inspect.getmembers(i[1]) if not j[0].startswith('_') ]))
print(f'### {class_name} Element ')
print(f'<!-- <+{class_name}.doc+> -->')
print(f'<!-- <+{class_name}.__init__+> -->\n')
print('\n'.join([f"#### {name}\n<!-- <+{class_name}.{name}+> -->\n" for name, obj in inspect.getmembers(aclass) if not name.startswith('_') ]))
print('\n------------------------- Functions start here -------------------------\n')
for f in psg_funcs:
if '_' != f[0][0]: # if doesn't START with _
print(f"<!-- <+func.{f[0]}+> -->")
if SHOW_UNDERSCORE_METHODS:
for i in psg_funcs:
if '_' in i:
print( f"<!-- <+func.{i}+> -->" )
else:
for i in psg_funcs:
print( f"<!-- <+func.{i}+> -->" )
window.Read()

View File

@ -1,2 +1,729 @@
2019-11-28 11:22:09,766>INFO: STARTING
2019-11-28 11:22:09,766>INFO: STARTING
2020-03-08 19:26:20,630>INFO: STARTING
2020-03-08 19:26:20,638>ERROR: function "print_to_element" not found in PySimpleGUI
2020-03-08 19:26:21,059>INFO: DONE 713 TAGS:
<!-- <+func.Popup+> --> - COMPLETE
<!-- <+func.PopupScrolled+> --> - COMPLETE
<!-- <+func.PopupNoWait+> --> - COMPLETE
<!-- <+func.PopupGetText+> --> - COMPLETE
<!-- <+func.PopupGetFile+> --> - COMPLETE
<!-- <+func.PopupGetFolder+> --> - COMPLETE
<!-- <+func.PopupAnimated+> --> - COMPLETE
<!-- <+func.CButton+> --> - COMPLETE
<!-- <+func.CalendarButton+> --> - COMPLETE
<!-- <+func.Cancel+> --> - COMPLETE
<!-- <+func.CloseButton+> --> - COMPLETE
<!-- <+func.ColorChooserButton+> --> - COMPLETE
<!-- <+func.Debug+> --> - COMPLETE
<!-- <+func.DummyButton+> --> - COMPLETE
<!-- <+func.Exit+> --> - COMPLETE
<!-- <+func.FileBrowse+> --> - COMPLETE
<!-- <+func.FileSaveAs+> --> - COMPLETE
<!-- <+func.FilesBrowse+> --> - COMPLETE
<!-- <+func.FillFormWithValues+> --> - COMPLETE
<!-- <+func.FolderBrowse+> --> - COMPLETE
<!-- <+func.Help+> --> - COMPLETE
<!-- <+func.No+> --> - COMPLETE
<!-- <+func.OK+> --> - COMPLETE
<!-- <+func.ObjToString+> --> - COMPLETE
<!-- <+func.ObjToStringSingleObj+> --> - COMPLETE
<!-- <+func.Ok+> --> - COMPLETE
<!-- <+func.Open+> --> - COMPLETE
<!-- <+func.Quit+> --> - COMPLETE
<!-- <+func.RButton+> --> - COMPLETE
<!-- <+func.ReadButton+> --> - COMPLETE
<!-- <+func.RealtimeButton+> --> - COMPLETE
<!-- <+func.Save+> --> - COMPLETE
<!-- <+func.SaveAs+> --> - COMPLETE
<!-- <+func.ScrolledTextBox+> --> - COMPLETE
<!-- <+func.SetGlobalIcon+> --> - COMPLETE
<!-- <+func.SetOptions+> --> - COMPLETE
<!-- <+func.Submit+> --> - COMPLETE
<!-- <+func.Yes+> --> - COMPLETE
<!-- <+func.easy_print+> --> - COMPLETE
<!-- <+func.eprint+> --> - COMPLETE
<!-- <+func.sgprint+> --> - COMPLETE
<!-- <+func.EasyPrint+> --> - COMPLETE
<!-- <+func.Print+> --> - COMPLETE
<!-- <+func.OneLineProgressMeter+> --> - COMPLETE
<!-- <+func.OneLineProgressMeterCancel+> --> - COMPLETE
<!-- <+func.one_line_progress_meter+> --> - COMPLETE
<!-- <+func.one_line_progress_meter_cancel+> --> - COMPLETE
<!-- <+func.Popup+> --> - COMPLETE
<!-- <+func.PopupAnimated+> --> - COMPLETE
<!-- <+func.PopupAnnoying+> --> - COMPLETE
<!-- <+func.PopupAutoClose+> --> - COMPLETE
<!-- <+func.PopupCancel+> --> - COMPLETE
<!-- <+func.PopupError+> --> - COMPLETE
<!-- <+func.PopupGetFile+> --> - COMPLETE
<!-- <+func.PopupGetFolder+> --> - COMPLETE
<!-- <+func.PopupGetText+> --> - COMPLETE
<!-- <+func.PopupNoBorder+> --> - COMPLETE
<!-- <+func.PopupNoButtons+> --> - COMPLETE
<!-- <+func.PopupNoFrame+> --> - COMPLETE
<!-- <+func.PopupNoTitlebar+> --> - COMPLETE
<!-- <+func.PopupNoWait+> --> - COMPLETE
<!-- <+func.PopupNonBlocking+> --> - COMPLETE
<!-- <+func.PopupOK+> --> - COMPLETE
<!-- <+func.PopupOKCancel+> --> - COMPLETE
<!-- <+func.PopupQuick+> --> - COMPLETE
<!-- <+func.PopupQuickMessage+> --> - COMPLETE
<!-- <+func.PopupScrolled+> --> - COMPLETE
<!-- <+func.PopupTimed+> --> - COMPLETE
<!-- <+func.PopupYesNo+> --> - COMPLETE
<!-- <+func.popup+> --> - COMPLETE
<!-- <+func.popup_animated+> --> - COMPLETE
<!-- <+func.popup_annoying+> --> - COMPLETE
<!-- <+func.popup_auto_close+> --> - COMPLETE
<!-- <+func.popup_cancel+> --> - COMPLETE
<!-- <+func.popup_error+> --> - COMPLETE
<!-- <+func.popup_get_file+> --> - COMPLETE
<!-- <+func.popup_get_folder+> --> - COMPLETE
<!-- <+func.popup_get_text+> --> - COMPLETE
<!-- <+func.popup_no_border+> --> - COMPLETE
<!-- <+func.popup_no_buttons+> --> - COMPLETE
<!-- <+func.popup_no_frame+> --> - COMPLETE
<!-- <+func.popup_no_titlebar+> --> - COMPLETE
<!-- <+func.popup_no_wait+> --> - COMPLETE
<!-- <+func.popup_non_blocking+> --> - COMPLETE
<!-- <+func.popup_ok+> --> - COMPLETE
<!-- <+func.popup_ok_cancel+> --> - COMPLETE
<!-- <+func.popup_quick+> --> - COMPLETE
<!-- <+func.popup_quick_message+> --> - COMPLETE
<!-- <+func.popup_scrolled+> --> - COMPLETE
<!-- <+func.popup_timed+> --> - COMPLETE
<!-- <+func.popup_yes_no+> --> - COMPLETE
<!-- <+func.fill_form_with_values+> --> - COMPLETE
<!-- <+func.main+> --> - COMPLETE
<!-- <+func.obj_to_string+> --> - COMPLETE
<!-- <+func.obj_to_string_single_obj+> --> - COMPLETE
<!-- <+func.set_global_icon+> --> - COMPLETE
<!-- <+func.set_options+> --> - COMPLETE
<!-- <+func.show_debugger_popout_window+> --> - COMPLETE
<!-- <+func.show_debugger_window+> --> - COMPLETE
<!-- <+func.sprint+> --> - COMPLETE
<!-- <+func.test+> --> - COMPLETE
<!-- <+func.theme+> --> - COMPLETE
<!-- <+func.theme_background_color+> --> - COMPLETE
<!-- <+func.theme_border_width+> --> - COMPLETE
<!-- <+func.theme_button_color+> --> - COMPLETE
<!-- <+func.theme_element_background_color+> --> - COMPLETE
<!-- <+func.theme_element_text_color+> --> - COMPLETE
<!-- <+func.theme_input_background_color+> --> - COMPLETE
<!-- <+func.theme_input_text_color+> --> - COMPLETE
<!-- <+func.theme_list+> --> - COMPLETE
<!-- <+func.theme_previewer+> --> - COMPLETE
<!-- <+func.theme_progress_bar_border_width+> --> - COMPLETE
<!-- <+func.theme_progress_bar_color+> --> - COMPLETE
<!-- <+func.theme_slider_border_width+> --> - COMPLETE
<!-- <+func.theme_slider_color+> --> - COMPLETE
<!-- <+func.theme_text_color+> --> - COMPLETE
<!-- <+func.theme_text_element_background_color+> --> - COMPLETE
<!-- <+func.ChangeLookAndFeel+> --> - COMPLETE
<!-- <+func.ListOfLookAndFeelValues+> --> - COMPLETE
<!-- <+func.preview_all_look_and_feel_themes+> --> - COMPLETE
<!-- <+func.list_of_look_and_feel_values+> --> - COMPLETE
<!-- <+func.change_look_and_feel+> --> - COMPLETE
<!-- <+Button.__init__+> --> - COMPLETE
<!-- <+Button.Click+> --> - COMPLETE
<!-- <+Button.GetText+> --> - COMPLETE
<!-- <+Button.SetFocus+> --> - COMPLETE
<!-- <+Button.SetTooltip+> --> - COMPLETE
<!-- <+Button.Update+> --> - COMPLETE
<!-- <+Button.bind+> --> - COMPLETE
<!-- <+Button.click+> --> - COMPLETE
<!-- <+Button.expand+> --> - COMPLETE
<!-- <+Button.get_size+> --> - COMPLETE
<!-- <+Button.get_text+> --> - COMPLETE
<!-- <+Button.hide_row+> --> - COMPLETE
<!-- <+Button.set_cursor+> --> - COMPLETE
<!-- <+Button.set_focus+> --> - COMPLETE
<!-- <+Button.set_size+> --> - COMPLETE
<!-- <+Button.set_tooltip+> --> - COMPLETE
<!-- <+Button.unbind+> --> - COMPLETE
<!-- <+Button.unhide_row+> --> - COMPLETE
<!-- <+Button.update+> --> - COMPLETE
<!-- <+ButtonMenu.__init__+> --> - COMPLETE
<!-- <+ButtonMenu.Click+> --> - COMPLETE
<!-- <+ButtonMenu.SetFocus+> --> - COMPLETE
<!-- <+ButtonMenu.SetTooltip+> --> - COMPLETE
<!-- <+ButtonMenu.Update+> --> - COMPLETE
<!-- <+ButtonMenu.bind+> --> - COMPLETE
<!-- <+ButtonMenu.expand+> --> - COMPLETE
<!-- <+ButtonMenu.get_size+> --> - COMPLETE
<!-- <+ButtonMenu.hide_row+> --> - COMPLETE
<!-- <+ButtonMenu.set_cursor+> --> - COMPLETE
<!-- <+ButtonMenu.set_focus+> --> - COMPLETE
<!-- <+ButtonMenu.set_size+> --> - COMPLETE
<!-- <+ButtonMenu.set_tooltip+> --> - COMPLETE
<!-- <+ButtonMenu.unbind+> --> - COMPLETE
<!-- <+ButtonMenu.unhide_row+> --> - COMPLETE
<!-- <+ButtonMenu.update+> --> - COMPLETE
<!-- <+Canvas.__init__+> --> - COMPLETE
<!-- <+Canvas.SetFocus+> --> - COMPLETE
<!-- <+Canvas.SetTooltip+> --> - COMPLETE
<!-- <+Canvas.bind+> --> - COMPLETE
<!-- <+Canvas.expand+> --> - COMPLETE
<!-- <+Canvas.get_size+> --> - COMPLETE
<!-- <+Canvas.hide_row+> --> - COMPLETE
<!-- <+Canvas.set_cursor+> --> - COMPLETE
<!-- <+Canvas.set_focus+> --> - COMPLETE
<!-- <+Canvas.set_size+> --> - COMPLETE
<!-- <+Canvas.set_tooltip+> --> - COMPLETE
<!-- <+Canvas.unbind+> --> - COMPLETE
<!-- <+Canvas.unhide_row+> --> - COMPLETE
<!-- <+Checkbox.__init__+> --> - COMPLETE
<!-- <+Checkbox.Get+> --> - COMPLETE
<!-- <+Checkbox.SetFocus+> --> - COMPLETE
<!-- <+Checkbox.SetTooltip+> --> - COMPLETE
<!-- <+Checkbox.Update+> --> - COMPLETE
<!-- <+Checkbox.bind+> --> - COMPLETE
<!-- <+Checkbox.expand+> --> - COMPLETE
<!-- <+Checkbox.get+> --> - COMPLETE
<!-- <+Checkbox.get_size+> --> - COMPLETE
<!-- <+Checkbox.hide_row+> --> - COMPLETE
<!-- <+Checkbox.set_cursor+> --> - COMPLETE
<!-- <+Checkbox.set_focus+> --> - COMPLETE
<!-- <+Checkbox.set_size+> --> - COMPLETE
<!-- <+Checkbox.set_tooltip+> --> - COMPLETE
<!-- <+Checkbox.unbind+> --> - COMPLETE
<!-- <+Checkbox.unhide_row+> --> - COMPLETE
<!-- <+Checkbox.update+> --> - COMPLETE
<!-- <+Column.__init__+> --> - COMPLETE
<!-- <+Column.AddRow+> --> - COMPLETE
<!-- <+Column.Layout+> --> - COMPLETE
<!-- <+Column.SetFocus+> --> - COMPLETE
<!-- <+Column.SetTooltip+> --> - COMPLETE
<!-- <+Column.Update+> --> - COMPLETE
<!-- <+Column.add_row+> --> - COMPLETE
<!-- <+Column.bind+> --> - COMPLETE
<!-- <+Column.expand+> --> - COMPLETE
<!-- <+Column.get_size+> --> - COMPLETE
<!-- <+Column.hide_row+> --> - COMPLETE
<!-- <+Column.layout+> --> - COMPLETE
<!-- <+Column.set_cursor+> --> - COMPLETE
<!-- <+Column.set_focus+> --> - COMPLETE
<!-- <+Column.set_size+> --> - COMPLETE
<!-- <+Column.set_tooltip+> --> - COMPLETE
<!-- <+Column.unbind+> --> - COMPLETE
<!-- <+Column.unhide_row+> --> - COMPLETE
<!-- <+Column.update+> --> - COMPLETE
<!-- <+Combo.__init__+> --> - COMPLETE
<!-- <+Combo.Get+> --> - COMPLETE
<!-- <+Combo.SetFocus+> --> - COMPLETE
<!-- <+Combo.SetTooltip+> --> - COMPLETE
<!-- <+Combo.Update+> --> - COMPLETE
<!-- <+Combo.bind+> --> - COMPLETE
<!-- <+Combo.expand+> --> - COMPLETE
<!-- <+Combo.get+> --> - COMPLETE
<!-- <+Combo.get_size+> --> - COMPLETE
<!-- <+Combo.hide_row+> --> - COMPLETE
<!-- <+Combo.set_cursor+> --> - COMPLETE
<!-- <+Combo.set_focus+> --> - COMPLETE
<!-- <+Combo.set_size+> --> - COMPLETE
<!-- <+Combo.set_tooltip+> --> - COMPLETE
<!-- <+Combo.unbind+> --> - COMPLETE
<!-- <+Combo.unhide_row+> --> - COMPLETE
<!-- <+Combo.update+> --> - COMPLETE
<!-- <+Frame.__init__+> --> - COMPLETE
<!-- <+Frame.AddRow+> --> - COMPLETE
<!-- <+Frame.Layout+> --> - COMPLETE
<!-- <+Frame.SetFocus+> --> - COMPLETE
<!-- <+Frame.SetTooltip+> --> - COMPLETE
<!-- <+Frame.Update+> --> - COMPLETE
<!-- <+Frame.add_row+> --> - COMPLETE
<!-- <+Frame.bind+> --> - COMPLETE
<!-- <+Frame.expand+> --> - COMPLETE
<!-- <+Frame.get_size+> --> - COMPLETE
<!-- <+Frame.hide_row+> --> - COMPLETE
<!-- <+Frame.layout+> --> - COMPLETE
<!-- <+Frame.set_cursor+> --> - COMPLETE
<!-- <+Frame.set_focus+> --> - COMPLETE
<!-- <+Frame.set_size+> --> - COMPLETE
<!-- <+Frame.set_tooltip+> --> - COMPLETE
<!-- <+Frame.unbind+> --> - COMPLETE
<!-- <+Frame.unhide_row+> --> - COMPLETE
<!-- <+Frame.update+> --> - COMPLETE
<!-- <+Graph.__init__+> --> - COMPLETE
<!-- <+Graph.BringFigureToFront+> --> - COMPLETE
<!-- <+Graph.DeleteFigure+> --> - COMPLETE
<!-- <+Graph.DrawArc+> --> - COMPLETE
<!-- <+Graph.DrawCircle+> --> - COMPLETE
<!-- <+Graph.DrawImage+> --> - COMPLETE
<!-- <+Graph.DrawLine+> --> - COMPLETE
<!-- <+Graph.DrawOval+> --> - COMPLETE
<!-- <+Graph.DrawPoint+> --> - COMPLETE
<!-- <+Graph.DrawPolygon+> --> - COMPLETE
<!-- <+Graph.DrawRectangle+> --> - COMPLETE
<!-- <+Graph.DrawText+> --> - COMPLETE
<!-- <+Graph.Erase+> --> - COMPLETE
<!-- <+Graph.GetBoundingBox+> --> - COMPLETE
<!-- <+Graph.GetFiguresAtLocation+> --> - COMPLETE
<!-- <+Graph.Move+> --> - COMPLETE
<!-- <+Graph.MoveFigure+> --> - COMPLETE
<!-- <+Graph.RelocateFigure+> --> - COMPLETE
<!-- <+Graph.SendFigureToBack+> --> - COMPLETE
<!-- <+Graph.SetFocus+> --> - COMPLETE
<!-- <+Graph.SetTooltip+> --> - COMPLETE
<!-- <+Graph.Update+> --> - COMPLETE
<!-- <+Graph.bind+> --> - COMPLETE
<!-- <+Graph.bring_figure_to_front+> --> - COMPLETE
<!-- <+Graph.change_coordinates+> --> - COMPLETE
<!-- <+Graph.delete_figure+> --> - COMPLETE
<!-- <+Graph.draw_arc+> --> - COMPLETE
<!-- <+Graph.draw_circle+> --> - COMPLETE
<!-- <+Graph.draw_image+> --> - COMPLETE
<!-- <+Graph.draw_line+> --> - COMPLETE
<!-- <+Graph.draw_oval+> --> - COMPLETE
<!-- <+Graph.draw_point+> --> - COMPLETE
<!-- <+Graph.draw_polygon+> --> - COMPLETE
<!-- <+Graph.draw_rectangle+> --> - COMPLETE
<!-- <+Graph.draw_text+> --> - COMPLETE
<!-- <+Graph.erase+> --> - COMPLETE
<!-- <+Graph.expand+> --> - COMPLETE
<!-- <+Graph.get_bounding_box+> --> - COMPLETE
<!-- <+Graph.get_figures_at_location+> --> - COMPLETE
<!-- <+Graph.get_size+> --> - COMPLETE
<!-- <+Graph.hide_row+> --> - COMPLETE
<!-- <+Graph.move+> --> - COMPLETE
<!-- <+Graph.move_figure+> --> - COMPLETE
<!-- <+Graph.relocate_figure+> --> - COMPLETE
<!-- <+Graph.send_figure_to_back+> --> - COMPLETE
<!-- <+Graph.set_cursor+> --> - COMPLETE
<!-- <+Graph.set_focus+> --> - COMPLETE
<!-- <+Graph.set_size+> --> - COMPLETE
<!-- <+Graph.set_tooltip+> --> - COMPLETE
<!-- <+Graph.unbind+> --> - COMPLETE
<!-- <+Graph.unhide_row+> --> - COMPLETE
<!-- <+Graph.update+> --> - COMPLETE
<!-- <+Image.__init__+> --> - COMPLETE
<!-- <+Image.SetFocus+> --> - COMPLETE
<!-- <+Image.SetTooltip+> --> - COMPLETE
<!-- <+Image.Update+> --> - COMPLETE
<!-- <+Image.UpdateAnimation+> --> - COMPLETE
<!-- <+Image.bind+> --> - COMPLETE
<!-- <+Image.expand+> --> - COMPLETE
<!-- <+Image.get_size+> --> - COMPLETE
<!-- <+Image.hide_row+> --> - COMPLETE
<!-- <+Image.set_cursor+> --> - COMPLETE
<!-- <+Image.set_focus+> --> - COMPLETE
<!-- <+Image.set_size+> --> - COMPLETE
<!-- <+Image.set_tooltip+> --> - COMPLETE
<!-- <+Image.unbind+> --> - COMPLETE
<!-- <+Image.unhide_row+> --> - COMPLETE
<!-- <+Image.update+> --> - COMPLETE
<!-- <+Image.update_animation+> --> - COMPLETE
<!-- <+Image.update_animation_no_buffering+> --> - COMPLETE
<!-- <+InputText.__init__+> --> - COMPLETE
<!-- <+InputText.Get+> --> - COMPLETE
<!-- <+InputText.SetFocus+> --> - COMPLETE
<!-- <+InputText.SetTooltip+> --> - COMPLETE
<!-- <+InputText.Update+> --> - COMPLETE
<!-- <+InputText.bind+> --> - COMPLETE
<!-- <+InputText.expand+> --> - COMPLETE
<!-- <+InputText.get+> --> - COMPLETE
<!-- <+InputText.get_size+> --> - COMPLETE
<!-- <+InputText.hide_row+> --> - COMPLETE
<!-- <+InputText.set_cursor+> --> - COMPLETE
<!-- <+InputText.set_focus+> --> - COMPLETE
<!-- <+InputText.set_size+> --> - COMPLETE
<!-- <+InputText.set_tooltip+> --> - COMPLETE
<!-- <+InputText.unbind+> --> - COMPLETE
<!-- <+InputText.unhide_row+> --> - COMPLETE
<!-- <+InputText.update+> --> - COMPLETE
<!-- <+Listbox.__init__+> --> - COMPLETE
<!-- <+Listbox.GetIndexes+> --> - COMPLETE
<!-- <+Listbox.GetListValues+> --> - COMPLETE
<!-- <+Listbox.SetFocus+> --> - COMPLETE
<!-- <+Listbox.SetTooltip+> --> - COMPLETE
<!-- <+Listbox.SetValue+> --> - COMPLETE
<!-- <+Listbox.Update+> --> - COMPLETE
<!-- <+Listbox.bind+> --> - COMPLETE
<!-- <+Listbox.expand+> --> - COMPLETE
<!-- <+Listbox.get+> --> - COMPLETE
<!-- <+Listbox.get_indexes+> --> - COMPLETE
<!-- <+Listbox.get_list_values+> --> - COMPLETE
<!-- <+Listbox.get_size+> --> - COMPLETE
<!-- <+Listbox.hide_row+> --> - COMPLETE
<!-- <+Listbox.set_cursor+> --> - COMPLETE
<!-- <+Listbox.set_focus+> --> - COMPLETE
<!-- <+Listbox.set_size+> --> - COMPLETE
<!-- <+Listbox.set_tooltip+> --> - COMPLETE
<!-- <+Listbox.set_value+> --> - COMPLETE
<!-- <+Listbox.unbind+> --> - COMPLETE
<!-- <+Listbox.unhide_row+> --> - COMPLETE
<!-- <+Listbox.update+> --> - COMPLETE
<!-- <+Menu.__init__+> --> - COMPLETE
<!-- <+Menu.SetFocus+> --> - COMPLETE
<!-- <+Menu.SetTooltip+> --> - COMPLETE
<!-- <+Menu.Update+> --> - COMPLETE
<!-- <+Menu.bind+> --> - COMPLETE
<!-- <+Menu.expand+> --> - COMPLETE
<!-- <+Menu.get_size+> --> - COMPLETE
<!-- <+Menu.hide_row+> --> - COMPLETE
<!-- <+Menu.set_cursor+> --> - COMPLETE
<!-- <+Menu.set_focus+> --> - COMPLETE
<!-- <+Menu.set_size+> --> - COMPLETE
<!-- <+Menu.set_tooltip+> --> - COMPLETE
<!-- <+Menu.unbind+> --> - COMPLETE
<!-- <+Menu.unhide_row+> --> - COMPLETE
<!-- <+Menu.update+> --> - COMPLETE
<!-- <+Multiline.__init__+> --> - COMPLETE
<!-- <+Multiline.Get+> --> - COMPLETE
<!-- <+Multiline.SetFocus+> --> - COMPLETE
<!-- <+Multiline.SetTooltip+> --> - COMPLETE
<!-- <+Multiline.Update+> --> - COMPLETE
<!-- <+Multiline.bind+> --> - COMPLETE
<!-- <+Multiline.expand+> --> - COMPLETE
<!-- <+Multiline.get+> --> - COMPLETE
<!-- <+Multiline.get_size+> --> - COMPLETE
<!-- <+Multiline.hide_row+> --> - COMPLETE
<!-- <+Multiline.print+> --> - COMPLETE
<!-- <+Multiline.set_cursor+> --> - COMPLETE
<!-- <+Multiline.set_focus+> --> - COMPLETE
<!-- <+Multiline.set_size+> --> - COMPLETE
<!-- <+Multiline.set_tooltip+> --> - COMPLETE
<!-- <+Multiline.unbind+> --> - COMPLETE
<!-- <+Multiline.unhide_row+> --> - COMPLETE
<!-- <+Multiline.update+> --> - COMPLETE
<!-- <+OptionMenu.__init__+> --> - COMPLETE
<!-- <+OptionMenu.SetFocus+> --> - COMPLETE
<!-- <+OptionMenu.SetTooltip+> --> - COMPLETE
<!-- <+OptionMenu.Update+> --> - COMPLETE
<!-- <+OptionMenu.bind+> --> - COMPLETE
<!-- <+OptionMenu.expand+> --> - COMPLETE
<!-- <+OptionMenu.get_size+> --> - COMPLETE
<!-- <+OptionMenu.hide_row+> --> - COMPLETE
<!-- <+OptionMenu.set_cursor+> --> - COMPLETE
<!-- <+OptionMenu.set_focus+> --> - COMPLETE
<!-- <+OptionMenu.set_size+> --> - COMPLETE
<!-- <+OptionMenu.set_tooltip+> --> - COMPLETE
<!-- <+OptionMenu.unbind+> --> - COMPLETE
<!-- <+OptionMenu.unhide_row+> --> - COMPLETE
<!-- <+OptionMenu.update+> --> - COMPLETE
<!-- <+Output.__init__+> --> - COMPLETE
<!-- <+Output.Get+> --> - COMPLETE
<!-- <+Output.SetFocus+> --> - COMPLETE
<!-- <+Output.SetTooltip+> --> - COMPLETE
<!-- <+Output.Update+> --> - COMPLETE
<!-- <+Output.bind+> --> - COMPLETE
<!-- <+Output.expand+> --> - COMPLETE
<!-- <+Output.get_size+> --> - COMPLETE
<!-- <+Output.hide_row+> --> - COMPLETE
<!-- <+Output.set_cursor+> --> - COMPLETE
<!-- <+Output.set_focus+> --> - COMPLETE
<!-- <+Output.set_size+> --> - COMPLETE
<!-- <+Output.set_tooltip+> --> - COMPLETE
<!-- <+Output.unbind+> --> - COMPLETE
<!-- <+Output.unhide_row+> --> - COMPLETE
<!-- <+Output.update+> --> - COMPLETE
<!-- <+Pane.__init__+> --> - COMPLETE
<!-- <+Pane.SetFocus+> --> - COMPLETE
<!-- <+Pane.SetTooltip+> --> - COMPLETE
<!-- <+Pane.Update+> --> - COMPLETE
<!-- <+Pane.bind+> --> - COMPLETE
<!-- <+Pane.expand+> --> - COMPLETE
<!-- <+Pane.get_size+> --> - COMPLETE
<!-- <+Pane.hide_row+> --> - COMPLETE
<!-- <+Pane.set_cursor+> --> - COMPLETE
<!-- <+Pane.set_focus+> --> - COMPLETE
<!-- <+Pane.set_size+> --> - COMPLETE
<!-- <+Pane.set_tooltip+> --> - COMPLETE
<!-- <+Pane.unbind+> --> - COMPLETE
<!-- <+Pane.unhide_row+> --> - COMPLETE
<!-- <+Pane.update+> --> - COMPLETE
<!-- <+ProgressBar.__init__+> --> - COMPLETE
<!-- <+ProgressBar.SetFocus+> --> - COMPLETE
<!-- <+ProgressBar.SetTooltip+> --> - COMPLETE
<!-- <+ProgressBar.Update+> --> - COMPLETE
<!-- <+ProgressBar.UpdateBar+> --> - COMPLETE
<!-- <+ProgressBar.bind+> --> - COMPLETE
<!-- <+ProgressBar.expand+> --> - COMPLETE
<!-- <+ProgressBar.get_size+> --> - COMPLETE
<!-- <+ProgressBar.hide_row+> --> - COMPLETE
<!-- <+ProgressBar.set_cursor+> --> - COMPLETE
<!-- <+ProgressBar.set_focus+> --> - COMPLETE
<!-- <+ProgressBar.set_size+> --> - COMPLETE
<!-- <+ProgressBar.set_tooltip+> --> - COMPLETE
<!-- <+ProgressBar.unbind+> --> - COMPLETE
<!-- <+ProgressBar.unhide_row+> --> - COMPLETE
<!-- <+ProgressBar.update+> --> - COMPLETE
<!-- <+ProgressBar.update_bar+> --> - COMPLETE
<!-- <+Radio.__init__+> --> - COMPLETE
<!-- <+Radio.Get+> --> - COMPLETE
<!-- <+Radio.ResetGroup+> --> - COMPLETE
<!-- <+Radio.SetFocus+> --> - COMPLETE
<!-- <+Radio.SetTooltip+> --> - COMPLETE
<!-- <+Radio.Update+> --> - COMPLETE
<!-- <+Radio.bind+> --> - COMPLETE
<!-- <+Radio.expand+> --> - COMPLETE
<!-- <+Radio.get+> --> - COMPLETE
<!-- <+Radio.get_size+> --> - COMPLETE
<!-- <+Radio.hide_row+> --> - COMPLETE
<!-- <+Radio.reset_group+> --> - COMPLETE
<!-- <+Radio.set_cursor+> --> - COMPLETE
<!-- <+Radio.set_focus+> --> - COMPLETE
<!-- <+Radio.set_size+> --> - COMPLETE
<!-- <+Radio.set_tooltip+> --> - COMPLETE
<!-- <+Radio.unbind+> --> - COMPLETE
<!-- <+Radio.unhide_row+> --> - COMPLETE
<!-- <+Radio.update+> --> - COMPLETE
<!-- <+Slider.__init__+> --> - COMPLETE
<!-- <+Slider.SetFocus+> --> - COMPLETE
<!-- <+Slider.SetTooltip+> --> - COMPLETE
<!-- <+Slider.Update+> --> - COMPLETE
<!-- <+Slider.bind+> --> - COMPLETE
<!-- <+Slider.expand+> --> - COMPLETE
<!-- <+Slider.get_size+> --> - COMPLETE
<!-- <+Slider.hide_row+> --> - COMPLETE
<!-- <+Slider.set_cursor+> --> - COMPLETE
<!-- <+Slider.set_focus+> --> - COMPLETE
<!-- <+Slider.set_size+> --> - COMPLETE
<!-- <+Slider.set_tooltip+> --> - COMPLETE
<!-- <+Slider.unbind+> --> - COMPLETE
<!-- <+Slider.unhide_row+> --> - COMPLETE
<!-- <+Slider.update+> --> - COMPLETE
<!-- <+Spin.__init__+> --> - COMPLETE
<!-- <+Spin.Get+> --> - COMPLETE
<!-- <+Spin.SetFocus+> --> - COMPLETE
<!-- <+Spin.SetTooltip+> --> - COMPLETE
<!-- <+Spin.Update+> --> - COMPLETE
<!-- <+Spin.bind+> --> - COMPLETE
<!-- <+Spin.expand+> --> - COMPLETE
<!-- <+Spin.get+> --> - COMPLETE
<!-- <+Spin.get_size+> --> - COMPLETE
<!-- <+Spin.hide_row+> --> - COMPLETE
<!-- <+Spin.set_cursor+> --> - COMPLETE
<!-- <+Spin.set_focus+> --> - COMPLETE
<!-- <+Spin.set_size+> --> - COMPLETE
<!-- <+Spin.set_tooltip+> --> - COMPLETE
<!-- <+Spin.unbind+> --> - COMPLETE
<!-- <+Spin.unhide_row+> --> - COMPLETE
<!-- <+Spin.update+> --> - COMPLETE
<!-- <+StatusBar.__init__+> --> - COMPLETE
<!-- <+StatusBar.SetFocus+> --> - COMPLETE
<!-- <+StatusBar.SetTooltip+> --> - COMPLETE
<!-- <+StatusBar.Update+> --> - COMPLETE
<!-- <+StatusBar.bind+> --> - COMPLETE
<!-- <+StatusBar.expand+> --> - COMPLETE
<!-- <+StatusBar.get_size+> --> - COMPLETE
<!-- <+StatusBar.hide_row+> --> - COMPLETE
<!-- <+StatusBar.set_cursor+> --> - COMPLETE
<!-- <+StatusBar.set_focus+> --> - COMPLETE
<!-- <+StatusBar.set_size+> --> - COMPLETE
<!-- <+StatusBar.set_tooltip+> --> - COMPLETE
<!-- <+StatusBar.unbind+> --> - COMPLETE
<!-- <+StatusBar.unhide_row+> --> - COMPLETE
<!-- <+StatusBar.update+> --> - COMPLETE
<!-- <+SystemTray.__init__+> --> - COMPLETE
<!-- <+SystemTray.Close+> --> - COMPLETE
<!-- <+SystemTray.Hide+> --> - COMPLETE
<!-- <+SystemTray.Read+> --> - COMPLETE
<!-- <+SystemTray.ShowMessage+> --> - COMPLETE
<!-- <+SystemTray.UnHide+> --> - COMPLETE
<!-- <+SystemTray.Update+> --> - COMPLETE
<!-- <+SystemTray.close+> --> - COMPLETE
<!-- <+SystemTray.hide+> --> - COMPLETE
<!-- <+SystemTray.notify+> --> - COMPLETE
<!-- <+SystemTray.read+> --> - COMPLETE
<!-- <+SystemTray.show_message+> --> - COMPLETE
<!-- <+SystemTray.un_hide+> --> - COMPLETE
<!-- <+SystemTray.update+> --> - COMPLETE
<!-- <+Tab.__init__+> --> - COMPLETE
<!-- <+Tab.AddRow+> --> - COMPLETE
<!-- <+Tab.Layout+> --> - COMPLETE
<!-- <+Tab.Select+> --> - COMPLETE
<!-- <+Tab.SetFocus+> --> - COMPLETE
<!-- <+Tab.SetTooltip+> --> - COMPLETE
<!-- <+Tab.Update+> --> - COMPLETE
<!-- <+Tab.add_row+> --> - COMPLETE
<!-- <+Tab.bind+> --> - COMPLETE
<!-- <+Tab.expand+> --> - COMPLETE
<!-- <+Tab.get_size+> --> - COMPLETE
<!-- <+Tab.hide_row+> --> - COMPLETE
<!-- <+Tab.layout+> --> - COMPLETE
<!-- <+Tab.select+> --> - COMPLETE
<!-- <+Tab.set_cursor+> --> - COMPLETE
<!-- <+Tab.set_focus+> --> - COMPLETE
<!-- <+Tab.set_size+> --> - COMPLETE
<!-- <+Tab.set_tooltip+> --> - COMPLETE
<!-- <+Tab.unbind+> --> - COMPLETE
<!-- <+Tab.unhide_row+> --> - COMPLETE
<!-- <+Tab.update+> --> - COMPLETE
<!-- <+TabGroup.__init__+> --> - COMPLETE
<!-- <+TabGroup.FindKeyFromTabName+> --> - COMPLETE
<!-- <+TabGroup.Get+> --> - COMPLETE
<!-- <+TabGroup.SetFocus+> --> - COMPLETE
<!-- <+TabGroup.SetTooltip+> --> - COMPLETE
<!-- <+TabGroup.bind+> --> - COMPLETE
<!-- <+TabGroup.expand+> --> - COMPLETE
<!-- <+TabGroup.find_key_from_tab_name+> --> - COMPLETE
<!-- <+TabGroup.get+> --> - COMPLETE
<!-- <+TabGroup.get_size+> --> - COMPLETE
<!-- <+TabGroup.hide_row+> --> - COMPLETE
<!-- <+TabGroup.set_cursor+> --> - COMPLETE
<!-- <+TabGroup.set_focus+> --> - COMPLETE
<!-- <+TabGroup.set_size+> --> - COMPLETE
<!-- <+TabGroup.set_tooltip+> --> - COMPLETE
<!-- <+TabGroup.unbind+> --> - COMPLETE
<!-- <+TabGroup.unhide_row+> --> - COMPLETE
<!-- <+Table.__init__+> --> - COMPLETE
<!-- <+Table.Get+> --> - COMPLETE
<!-- <+Table.SetFocus+> --> - COMPLETE
<!-- <+Table.SetTooltip+> --> - COMPLETE
<!-- <+Table.Update+> --> - COMPLETE
<!-- <+Table.bind+> --> - COMPLETE
<!-- <+Table.expand+> --> - COMPLETE
<!-- <+Table.get+> --> - COMPLETE
<!-- <+Table.get_size+> --> - COMPLETE
<!-- <+Table.hide_row+> --> - COMPLETE
<!-- <+Table.set_cursor+> --> - COMPLETE
<!-- <+Table.set_focus+> --> - COMPLETE
<!-- <+Table.set_size+> --> - COMPLETE
<!-- <+Table.set_tooltip+> --> - COMPLETE
<!-- <+Table.unbind+> --> - COMPLETE
<!-- <+Table.unhide_row+> --> - COMPLETE
<!-- <+Table.update+> --> - COMPLETE
<!-- <+Text.__init__+> --> - COMPLETE
<!-- <+Text.SetFocus+> --> - COMPLETE
<!-- <+Text.SetTooltip+> --> - COMPLETE
<!-- <+Text.Update+> --> - COMPLETE
<!-- <+Text.bind+> --> - COMPLETE
<!-- <+Text.expand+> --> - COMPLETE
<!-- <+Text.get_size+> --> - COMPLETE
<!-- <+Text.hide_row+> --> - COMPLETE
<!-- <+Text.set_cursor+> --> - COMPLETE
<!-- <+Text.set_focus+> --> - COMPLETE
<!-- <+Text.set_size+> --> - COMPLETE
<!-- <+Text.set_tooltip+> --> - COMPLETE
<!-- <+Text.unbind+> --> - COMPLETE
<!-- <+Text.unhide_row+> --> - COMPLETE
<!-- <+Text.update+> --> - COMPLETE
<!-- <+Tree.__init__+> --> - COMPLETE
<!-- <+Tree.SetFocus+> --> - COMPLETE
<!-- <+Tree.SetTooltip+> --> - COMPLETE
<!-- <+Tree.Update+> --> - COMPLETE
<!-- <+Tree.add_treeview_data+> --> - COMPLETE
<!-- <+Tree.bind+> --> - COMPLETE
<!-- <+Tree.expand+> --> - COMPLETE
<!-- <+Tree.get_size+> --> - COMPLETE
<!-- <+Tree.hide_row+> --> - COMPLETE
<!-- <+Tree.set_cursor+> --> - COMPLETE
<!-- <+Tree.set_focus+> --> - COMPLETE
<!-- <+Tree.set_size+> --> - COMPLETE
<!-- <+Tree.set_tooltip+> --> - COMPLETE
<!-- <+Tree.unbind+> --> - COMPLETE
<!-- <+Tree.unhide_row+> --> - COMPLETE
<!-- <+Tree.update+> --> - COMPLETE
<!-- <+TreeData.__init__+> --> - COMPLETE
<!-- <+TreeData.Insert+> --> - COMPLETE
<!-- <+TreeData.Node+> --> - COMPLETE
<!-- <+TreeData.insert+> --> - COMPLETE
<!-- <+VerticalSeparator.__init__+> --> - COMPLETE
<!-- <+VerticalSeparator.SetFocus+> --> - COMPLETE
<!-- <+VerticalSeparator.SetTooltip+> --> - COMPLETE
<!-- <+VerticalSeparator.bind+> --> - COMPLETE
<!-- <+VerticalSeparator.expand+> --> - COMPLETE
<!-- <+VerticalSeparator.get_size+> --> - COMPLETE
<!-- <+VerticalSeparator.hide_row+> --> - COMPLETE
<!-- <+VerticalSeparator.set_cursor+> --> - COMPLETE
<!-- <+VerticalSeparator.set_focus+> --> - COMPLETE
<!-- <+VerticalSeparator.set_size+> --> - COMPLETE
<!-- <+VerticalSeparator.set_tooltip+> --> - COMPLETE
<!-- <+VerticalSeparator.unbind+> --> - COMPLETE
<!-- <+VerticalSeparator.unhide_row+> --> - COMPLETE
<!-- <+Window.__init__+> --> - COMPLETE
<!-- <+Window.AddRow+> --> - COMPLETE
<!-- <+Window.AddRows+> --> - COMPLETE
<!-- <+Window.AlphaChannel+> --> - COMPLETE
<!-- <+Window.BringToFront+> --> - COMPLETE
<!-- <+Window.Close+> --> - COMPLETE
<!-- <+Window.CurrentLocation+> --> - COMPLETE
<!-- <+Window.Disable+> --> - COMPLETE
<!-- <+Window.DisableDebugger+> --> - COMPLETE
<!-- <+Window.Disappear+> --> - COMPLETE
<!-- <+Window.Elem+> --> - COMPLETE
<!-- <+Window.Element+> --> - COMPLETE
<!-- <+Window.Enable+> --> - COMPLETE
<!-- <+Window.EnableDebugger+> --> - COMPLETE
<!-- <+Window.Fill+> --> - COMPLETE
<!-- <+Window.Finalize+> --> - COMPLETE
<!-- <+Window.Find+> --> - COMPLETE
<!-- <+Window.FindElement+> --> - COMPLETE
<!-- <+Window.FindElementWithFocus+> --> - COMPLETE
<!-- <+Window.GetScreenDimensions+> --> - COMPLETE
<!-- <+Window.GrabAnyWhereOff+> --> - COMPLETE
<!-- <+Window.GrabAnyWhereOn+> --> - COMPLETE
<!-- <+Window.Hide+> --> - COMPLETE
<!-- <+Window.Layout+> --> - COMPLETE
<!-- <+Window.LoadFromDisk+> --> - COMPLETE
<!-- <+Window.Maximize+> --> - COMPLETE
<!-- <+Window.Minimize+> --> - COMPLETE
<!-- <+Window.Move+> --> - COMPLETE
<!-- <+Window.Normal+> --> - COMPLETE
<!-- <+Window.Read+> --> - COMPLETE
<!-- <+Window.Reappear+> --> - COMPLETE
<!-- <+Window.Refresh+> --> - COMPLETE
<!-- <+Window.SaveToDisk+> --> - COMPLETE
<!-- <+Window.SendToBack+> --> - COMPLETE
<!-- <+Window.SetAlpha+> --> - COMPLETE
<!-- <+Window.SetIcon+> --> - COMPLETE
<!-- <+Window.SetTransparentColor+> --> - COMPLETE
<!-- <+Window.Size+> --> - COMPLETE
<!-- <+Window.UnHide+> --> - COMPLETE
<!-- <+Window.VisibilityChanged+> --> - COMPLETE
<!-- <+Window.add_row+> --> - COMPLETE
<!-- <+Window.add_rows+> --> - COMPLETE
<!-- <+Window.alpha_channel+> --> - COMPLETE
<!-- <+Window.bind+> --> - COMPLETE
<!-- <+Window.bring_to_front+> --> - COMPLETE
<!-- <+Window.close+> --> - COMPLETE
<!-- <+Window.current_location+> --> - COMPLETE
<!-- <+Window.disable+> --> - COMPLETE
<!-- <+Window.disable_debugger+> --> - COMPLETE
<!-- <+Window.disappear+> --> - COMPLETE
<!-- <+Window.elem+> --> - COMPLETE
<!-- <+Window.element+> --> - COMPLETE
<!-- <+Window.element_list+> --> - COMPLETE
<!-- <+Window.enable+> --> - COMPLETE
<!-- <+Window.enable_debugger+> --> - COMPLETE
<!-- <+Window.extend_layout+> --> - COMPLETE
<!-- <+Window.fill+> --> - COMPLETE
<!-- <+Window.finalize+> --> - COMPLETE
<!-- <+Window.find+> --> - COMPLETE
<!-- <+Window.find_element+> --> - COMPLETE
<!-- <+Window.find_element_with_focus+> --> - COMPLETE
<!-- <+Window.get_screen_dimensions+> --> - COMPLETE
<!-- <+Window.get_screen_size+> --> - COMPLETE
<!-- <+Window.grab_any_where_off+> --> - COMPLETE
<!-- <+Window.grab_any_where_on+> --> - COMPLETE
<!-- <+Window.hide+> --> - COMPLETE
<!-- <+Window.layout+> --> - COMPLETE
<!-- <+Window.load_from_disk+> --> - COMPLETE
<!-- <+Window.maximize+> --> - COMPLETE
<!-- <+Window.minimize+> --> - COMPLETE
<!-- <+Window.move+> --> - COMPLETE
<!-- <+Window.normal+> --> - COMPLETE
<!-- <+Window.read+> --> - COMPLETE
<!-- <+Window.reappear+> --> - COMPLETE
<!-- <+Window.refresh+> --> - COMPLETE
<!-- <+Window.save_to_disk+> --> - COMPLETE
<!-- <+Window.send_to_back+> --> - COMPLETE
<!-- <+Window.set_alpha+> --> - COMPLETE
<!-- <+Window.set_icon+> --> - COMPLETE
<!-- <+Window.set_transparent_color+> --> - COMPLETE
<!-- <+Window.size+> --> - COMPLETE
<!-- <+Window.un_hide+> --> - COMPLETE
<!-- <+Window.visibility_changed+> --> - COMPLETE
2020-03-08 19:26:21,059>INFO: FAIL WITH 10 TAGS:
<!-- <+func.easy_print_close+> --> - FAIL
<!-- <+func.sgprint_close+> --> - FAIL
<!-- <+func.EasyPrintClose+> --> - FAIL
<!-- <+func.PrintClose+> --> - FAIL
<!-- <+Canvas.TKCanvas+> --> - FAIL
<!-- <+Canvas.tk_canvas+> --> - FAIL
<!-- <+Graph.TKCanvas+> --> - FAIL
<!-- <+Graph.tk_canvas+> --> - FAIL
<!-- <+Output.TKOut+> --> - FAIL
<!-- <+Output.tk_out+> --> - FAIL
2020-03-08 19:26:21,060>INFO: Deleting html comments
2020-03-08 19:26:21,079>INFO: ending. writing to a file///////////////