Merge pull request #6164 from PySimpleGUI/Dev-latest
Moved debugger constants to sinde of the debugger class. Simplified t…
This commit is contained in:
		
						commit
						6b20da8c59
					
				
					 1 changed files with 55 additions and 49 deletions
				
			
		
							
								
								
									
										104
									
								
								PySimpleGUI.py
									
										
									
									
									
								
							
							
						
						
									
										104
									
								
								PySimpleGUI.py
									
										
									
									
									
								
							|  | @ -1,6 +1,6 @@ | |||
| #!/usr/bin/python3 | ||||
| 
 | ||||
| version = __version__ = "4.60.4.138 Unreleased" | ||||
| version = __version__ = "4.60.4.139 Unreleased" | ||||
| 
 | ||||
| _change_log = """ | ||||
|     Changelog since 4.60.0 released to PyPI on 8-May-2022 | ||||
|  | @ -343,6 +343,8 @@ _change_log = """ | |||
|         "Take me to error" button is disabled in error traceback popup if not editor is configured. Also adds instructions if no editor. | ||||
|     4.60.4.138 | ||||
|         Added begin_at_sunday_plus to the CalendarButton docstring | ||||
|     4.60.4.139 | ||||
|         Moved debugger constants to sinde of the debugger class. Simplified the locals and globals popups. | ||||
|          | ||||
|     """ | ||||
| 
 | ||||
|  | @ -23654,26 +23656,28 @@ def main_mac_feature_control(): | |||
| 
 | ||||
| red_x = b"R0lGODlhEAAQAPeQAIsAAI0AAI4AAI8AAJIAAJUAAJQCApkAAJoAAJ4AAJkJCaAAAKYAAKcAAKcCAKcDA6cGAKgAAKsAAKsCAKwAAK0AAK8AAK4CAK8DAqUJAKULAKwLALAAALEAALIAALMAALMDALQAALUAALYAALcEALoAALsAALsCALwAAL8AALkJAL4NAL8NAKoTAKwbAbEQALMVAL0QAL0RAKsREaodHbkQELMsALg2ALk3ALs+ALE2FbgpKbA1Nbc1Nb44N8AAAMIWAMsvAMUgDMcxAKVABb9NBbVJErFYEq1iMrtoMr5kP8BKAMFLAMxKANBBANFCANJFANFEB9JKAMFcANFZANZcANpfAMJUEMZVEc5hAM5pAMluBdRsANR8AM9YOrdERMpIQs1UVMR5WNt8X8VgYMdlZcxtYtx4YNF/btp9eraNf9qXXNCCZsyLeNSLd8SSecySf82kd9qqc9uBgdyBgd+EhN6JgtSIiNuJieGHhOGLg+GKhOKamty1ste4sNO+ueenp+inp+HHrebGrefKuOPTzejWzera1O7b1vLb2/bl4vTu7fbw7ffx7vnz8f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJAALAAAAAAQABAAAAjUACEJHEiwYEEABniQKfNFgQCDkATQwAMokEU+PQgUFDAjjR09e/LUmUNnh8aBCcCgUeRmzBkzie6EeQBAoAAMXuA8ciRGCaJHfXzUMCAQgYooWN48anTokR8dQk4sELggBhQrU9Q8evSHiJQgLCIIfMDCSZUjhbYuQkLFCRAMAiOQGGLE0CNBcZYmaRIDLqQFGF60eTRoSxc5jwjhACFWIAgMLtgUocJFy5orL0IQRHAiQgsbRZYswbEhBIiCCH6EiJAhAwQMKU5DjHCi9gnZEHMTDAgAOw==" | ||||
| 
 | ||||
| COLOR_SCHEME = 'dark grey 13' | ||||
| DEBUGGER_POPOUT_THEME = 'dark grey 13' | ||||
| WIDTH_VARIABLES = 23 | ||||
| WIDTH_RESULTS = 46 | ||||
| 
 | ||||
| WIDTH_WATCHER_VARIABLES = 20 | ||||
| WIDTH_WATCHER_RESULTS = 60 | ||||
| 
 | ||||
| WIDTH_LOCALS = 80 | ||||
| NUM_AUTO_WATCH = 9 | ||||
| 
 | ||||
| MAX_LINES_PER_RESULT_FLOATING = 4 | ||||
| MAX_LINES_PER_RESULT_MAIN = 3 | ||||
| 
 | ||||
| POPOUT_WINDOW_FONT = 'Sans 8' | ||||
| DEBUGGER_VARIABLE_DETAILS_FONT = 'Courier 10' | ||||
| 
 | ||||
| 
 | ||||
| class _Debugger: | ||||
|     debugger = None | ||||
|     DEBUGGER_MAIN_WINDOW_THEME = 'dark grey 13' | ||||
|     DEBUGGER_POPOUT_THEME = 'dark grey 13' | ||||
|     WIDTH_VARIABLES = 23 | ||||
|     WIDTH_RESULTS = 46 | ||||
| 
 | ||||
|     WIDTH_WATCHER_VARIABLES = 20 | ||||
|     WIDTH_WATCHER_RESULTS = 60 | ||||
| 
 | ||||
|     WIDTH_LOCALS = 80 | ||||
|     NUM_AUTO_WATCH = 9 | ||||
| 
 | ||||
|     MAX_LINES_PER_RESULT_FLOATING = 4 | ||||
|     MAX_LINES_PER_RESULT_MAIN = 3 | ||||
| 
 | ||||
|     DEBUGGER_POPOUT_WINDOW_FONT = 'Sans 8' | ||||
|     DEBUGGER_VARIABLE_DETAILS_FONT = 'Courier 10' | ||||
| 
 | ||||
|     ''' | ||||
|         #     #                    ###### | ||||
|         ##   ##   ##   # #    #    #     # ###### #####  #    #  ####   ####  ###### ##### | ||||
|  | @ -23696,12 +23700,12 @@ class _Debugger: | |||
|     # Includes the DUAL PANE (now 2 tabs)!  Don't forget REPL is there too! | ||||
|     def _build_main_debugger_window(self, location=(None, None)): | ||||
|         old_theme = theme() | ||||
|         theme(COLOR_SCHEME) | ||||
|         theme(_Debugger.DEBUGGER_MAIN_WINDOW_THEME) | ||||
| 
 | ||||
|         def InVar(key1): | ||||
|             row1 = [T('    '), | ||||
|                     I(key=key1, size=(WIDTH_VARIABLES, 1)), | ||||
|                     T('', key=key1 + 'CHANGED_', size=(WIDTH_RESULTS, 1)), B('Detail', key=key1 + 'DETAIL_'), | ||||
|                     I(key=key1, size=(_Debugger.WIDTH_VARIABLES, 1)), | ||||
|                     T('', key=key1 + 'CHANGED_', size=(_Debugger.WIDTH_RESULTS, 1)), B('Detail', key=key1 + 'DETAIL_'), | ||||
|                     B('Obj', key=key1 + 'OBJ_'), ] | ||||
|             return row1 | ||||
| 
 | ||||
|  | @ -23722,10 +23726,9 @@ class _Debugger: | |||
|                             Button('Popout', key='-POPOUT-')]] | ||||
| 
 | ||||
|         var_layout = [] | ||||
|         for i in range(NUM_AUTO_WATCH): | ||||
|             var_layout.append([T('', size=(WIDTH_WATCHER_VARIABLES, 1), key='_WATCH%s_' % i), | ||||
|                                T('', size=(WIDTH_WATCHER_RESULTS, MAX_LINES_PER_RESULT_MAIN), key='_WATCH%s_RESULT_' % i, | ||||
|                                  )]) | ||||
|         for i in range(_Debugger.NUM_AUTO_WATCH): | ||||
|             var_layout.append([T('', size=(_Debugger.WIDTH_WATCHER_VARIABLES, 1), key='_WATCH%s_' % i), | ||||
|                                T('', size=(_Debugger.WIDTH_WATCHER_RESULTS, _Debugger.MAX_LINES_PER_RESULT_MAIN), key='_WATCH%s_RESULT_' % i,)]) | ||||
| 
 | ||||
|         col1 = [ | ||||
|             # [Frame('Auto Watches', autowatch_frame+variable_values, title_color='blue')] | ||||
|  | @ -23742,8 +23745,7 @@ class _Debugger: | |||
|                   [TabGroup([[Tab('Variables', col1), Tab('REPL & Watches', col2)]])]] | ||||
| 
 | ||||
|         # ------------------------------- Create main window ------------------------------- | ||||
|         window = Window("PySimpleGUI Debugger", layout, icon=PSG_DEBUGGER_LOGO, margins=(0, 0), location=location, keep_on_top=True, | ||||
|                         right_click_menu=[[''], ['Exit', ]]) | ||||
|         window = Window("PySimpleGUI Debugger", layout, icon=PSG_DEBUGGER_LOGO, margins=(0, 0), location=location, keep_on_top=True, right_click_menu=[[''], ['Exit', ]]) | ||||
| 
 | ||||
|         Window._read_call_from_debugger = True | ||||
|         window.finalize() | ||||
|  | @ -23801,7 +23803,7 @@ class _Debugger: | |||
|                 result = str(eval(str(var), myglobals, mylocals)) | ||||
|             except: | ||||
|                 result = '' | ||||
|             popup_scrolled(str(values['_VAR{}_'.format(event[4])]) + '\n' + result, title=var, non_blocking=True, font=DEBUGGER_VARIABLE_DETAILS_FONT) | ||||
|             popup_scrolled(str(values['_VAR{}_'.format(event[4])]) + '\n' + result, title=var, non_blocking=True, font=_Debugger.DEBUGGER_VARIABLE_DETAILS_FONT) | ||||
|         # BUTTON - OBJ | ||||
|         elif event.endswith('_OBJ_'):  # OBJECT BUTTON | ||||
|             var = values['_VAR{}_'.format(event[4])] | ||||
|  | @ -23813,17 +23815,17 @@ class _Debugger: | |||
|                     result = ObjToStringSingleObj(result) | ||||
|                 except Exception as e: | ||||
|                     result = '{}\nError showing object {}'.format(e, var) | ||||
|             popup_scrolled(str(var) + '\n' + str(result), title=var, non_blocking=True, font=DEBUGGER_VARIABLE_DETAILS_FONT) | ||||
|             popup_scrolled(str(var) + '\n' + str(result), title=var, non_blocking=True, font=Debugger.DEBUGGER_VARIABLE_DETAILS_FONT) | ||||
|         # ------------------------------- Process Watch Tab ------------------------------- | ||||
|         # BUTTON - Choose Locals to see | ||||
|         elif event == '-LOCALS-':  # Show all locals BUTTON | ||||
|             self._choose_auto_watches(mylocals) | ||||
|         # BUTTON - Locals (quick popup) | ||||
|         elif event == '-ALL_LOCALS-': | ||||
|             self._display_all_vars(mylocals) | ||||
|             self._display_all_vars('All Locals', mylocals) | ||||
|         # BUTTON - Globals (quick popup) | ||||
|         elif event == '-GLOBALS-': | ||||
|             self._display_all_vars(myglobals) | ||||
|             self._display_all_vars('All Globals', myglobals) | ||||
|         # BUTTON - clear all | ||||
|         elif event == 'Clear All Auto Watches': | ||||
|             if popup_yes_no('Do you really want to clear all Auto-Watches?', 'Really Clear??') == 'Yes': | ||||
|  | @ -23866,7 +23868,7 @@ class _Debugger: | |||
|                     self.watcher_window.Element('_WATCH{}_RESULT_'.format(slot)).Update('') | ||||
|                 slot += 1 | ||||
| 
 | ||||
|             if slot + int(not self.custom_watch in (None, '')) >= NUM_AUTO_WATCH: | ||||
|             if slot + int(not self.custom_watch in (None, '')) >= _Debugger.NUM_AUTO_WATCH: | ||||
|                 break | ||||
|         # If a custom watch was set, display that value in the window | ||||
|         if self.custom_watch: | ||||
|  | @ -23878,7 +23880,7 @@ class _Debugger: | |||
|             self.watcher_window.Element('_WATCH{}_RESULT_'.format(slot)).Update(self.myrc) | ||||
|             slot += 1 | ||||
|         # blank out all of the slots not used (blank) | ||||
|         for i in range(slot, NUM_AUTO_WATCH): | ||||
|         for i in range(slot, _Debugger.NUM_AUTO_WATCH): | ||||
|             self.watcher_window.Element('_WATCH{}_'.format(i)).Update('') | ||||
|             self.watcher_window.Element('_WATCH{}_RESULT_'.format(i)).Update('') | ||||
| 
 | ||||
|  | @ -23927,12 +23929,12 @@ class _Debugger: | |||
|     ''' | ||||
|     # displays them into a single text box | ||||
| 
 | ||||
|     def _display_all_vars(self, dict): | ||||
|     def _display_all_vars(self, title, dict): | ||||
|         num_cols = 3 | ||||
|         output_text = '' | ||||
|         num_lines = 2 | ||||
|         cur_col = 0 | ||||
|         out_text = 'All of your Vars' | ||||
|         out_text = title + '\n' | ||||
|         longest_line = max([len(key) for key in dict]) | ||||
|         line = [] | ||||
|         sorted_dict = {} | ||||
|  | @ -23940,15 +23942,19 @@ class _Debugger: | |||
|             sorted_dict[key] = dict[key] | ||||
|         for key in sorted_dict: | ||||
|             value = dict[key] | ||||
|             wrapped_list = textwrap.wrap(str(value), 60) | ||||
|             wrapped_text = '\n'.join(wrapped_list) | ||||
|             # wrapped_list = textwrap.wrap(str(value), 60) | ||||
|             # wrapped_text = '\n'.join(wrapped_list) | ||||
|             wrapped_text = str(value) | ||||
|             out_text += '{} - {}\n'.format(key, wrapped_text) | ||||
|             if cur_col + 1 == num_cols: | ||||
|                 cur_col = 0 | ||||
|                 num_lines += len(wrapped_list) | ||||
|             else: | ||||
|                 cur_col += 1 | ||||
|         popup_scrolled(out_text, non_blocking=True) | ||||
|             # if cur_col + 1 == num_cols: | ||||
|             #     cur_col = 0 | ||||
|             #     num_lines += len(wrapped_list) | ||||
|             # else: | ||||
|             #     cur_col += 1 | ||||
|         old_theme = theme() | ||||
|         theme(_Debugger.DEBUGGER_MAIN_WINDOW_THEME) | ||||
|         popup_scrolled(out_text, title=title, non_blocking=True, font=_Debugger.DEBUGGER_VARIABLE_DETAILS_FONT, keep_on_top=True, icon=PSG_DEBUGGER_LOGO) | ||||
|         theme(old_theme) | ||||
| 
 | ||||
|     ''' | ||||
|         #####                                        #     # | ||||
|  | @ -23970,7 +23976,7 @@ class _Debugger: | |||
| 
 | ||||
|     def _choose_auto_watches(self, my_locals): | ||||
|         old_theme = theme() | ||||
|         theme(COLOR_SCHEME) | ||||
|         theme(_Debugger.DEBUGGER_MAIN_WINDOW_THEME) | ||||
|         num_cols = 3 | ||||
|         output_text = '' | ||||
|         num_lines = 2 | ||||
|  | @ -23998,7 +24004,7 @@ class _Debugger: | |||
|         layout += [ | ||||
|             [Ok(), Cancel(), Button('Clear All'), Button('Select [almost] All', key='-AUTO_SELECT-')]] | ||||
| 
 | ||||
|         window = Window('All Locals', layout, icon=PSG_DEBUGGER_LOGO, finalize=True) | ||||
|         window = Window('Choose Watches', layout, icon=PSG_DEBUGGER_LOGO, finalize=True, keep_on_top=True) | ||||
| 
 | ||||
|         while True:  # event loop | ||||
|             event, values = window.read() | ||||
|  | @ -24053,7 +24059,7 @@ class _Debugger: | |||
|         if self.popout_window:  # if floating window already exists, close it first | ||||
|             self.popout_window.Close() | ||||
|         old_theme = theme() | ||||
|         theme(DEBUGGER_POPOUT_THEME) | ||||
|         theme(_Debugger.DEBUGGER_POPOUT_THEME) | ||||
|         num_cols = 2 | ||||
|         width_var = 15 | ||||
|         width_value = 30 | ||||
|  | @ -24070,10 +24076,10 @@ class _Debugger: | |||
|         for key in self.popout_choices: | ||||
|             if self.popout_choices[key] is True: | ||||
|                 value = str(self.locals.get(key)) | ||||
|                 h = min(len(value) // width_value + 1, MAX_LINES_PER_RESULT_FLOATING) | ||||
|                 line += [Text('{}'.format(key), size=(width_var, 1), font=POPOUT_WINDOW_FONT), | ||||
|                          Text(' = ', font=POPOUT_WINDOW_FONT), | ||||
|                          Text(value, key=key, size=(width_value, h), font=POPOUT_WINDOW_FONT)] | ||||
|                 h = min(len(value) // width_value + 1, _Debugger.MAX_LINES_PER_RESULT_FLOATING) | ||||
|                 line += [Text('{}'.format(key), size=(width_var, 1), font=_Debugger.DEBUGGER_POPOUT_WINDOW_FONT), | ||||
|                          Text(' = ', font=_Debugger.DEBUGGER_POPOUT_WINDOW_FONT), | ||||
|                          Text(value, key=key, size=(width_value, h), font=_Debugger.DEBUGGER_POPOUT_WINDOW_FONT)] | ||||
|                 if col + 1 < num_cols: | ||||
|                     line += [VerticalSeparator(), T(' ')] | ||||
|                 col += 1 | ||||
|  | @ -26244,4 +26250,4 @@ if __name__ == '__main__': | |||
|         exit(0) | ||||
|     main() | ||||
|     exit(0) | ||||
| #72a37da2ed2698572ff1dd1ff7c3117548c6d90f24a80357f9ab68bf2ce2631e77578781d2a862823b929a07256888312fd4d577981e55c841544ea2aa0705867d41371f9b5ebf3e779fa0af4dee1bbacc65e6c4c8f8524a881eebb41121b3664966154f6346594dd364552465cd951eae92dfd878fb092ebc3885e4186537addeca75a45074d7027d7c91c0a9f294770d35757a46164a5d33e16f18eac7ca661fc184cc68d2d9204e34b01ad877ac4aadb020bf86e36decdeb51417866aa9e03a9ee34902c9ed84f604f15267cdfd6d4dc75bb0cd7b989c4552941a91ec3fecfa7abc13c179cfcbc943ca197f42d602c22966e40eb4230381a12da8d5a8c9c1ba31c8a857cbb3376a7d046b5e27567680abc2c10f4fde972371fd8b3005fc536f998834139061bfe8291aa641c767cd6996d7684d36bf388da4ea8ff26685625f4c757520df5772af2d2e1029009562628aad1acdc91d924269eb44d6e1427ffda09c46e44dcfac8bf46d3cd8139c20109e61966695176386ff8fd289ef9d62419824283ba656b9e744ad49eb0345375e1d3cefbc11c2a09f4309d9b33edf38de9dbbf2656198459b5bd051b18b1dc8ccd5edc87fe45b85e6b083b52c1748e16f4952609278705daa1475b83669922dd1168db67b4ea7dbfa1526e9bd89f3c30a4334fd198ce05f3dfcc4358cd1682428890d795541fea9b405447ee485d0ff | ||||
| #33fbe913c63f0fa0f0893ef55e3f6af4895e599092b2f002692e055f221a53df9b32f5642ce0d85df2d6f7a8eb74aaea23ff3e3b7b60db9bb7746ea8383c9a3c9950c8a1eef3573bd88760d605dd513dee435968c36503c87cc5ae59e2bc32406922fc801a2ce114f12134c6fdc40207a08a93164c44591824222cd0fd6eb7e13255257ba3359d2d2026c8404e351949788c32d159018219ac53b5ca362e86c0c8d6e44158ee39d142f6b2326d16c1616ca86e2f17299d2df53dedd7af1a7f7ff5ed61aa78881f3f4ecf612ca5b170c780122bb4c7cd53dfe3cb421bd78b1748f611b3de86357a98e0258e08480b8d0e3a81978565a11db28a2ba288e6f1271b01b93561e35e7aa1107801896afd249b9ba60c5557bf1040656c6e6d790a72f6dfeedf5cf4b7270e90a897e5b86964bf1c87f6c3c49f2df6e6474f2b4397c2804d16b69d289440e8763373ed5fd73f967203e65b0aec8ef83add0a286c41c4d324faa94b0dd1fd6b0f49ab61755317a954dada3b2661e24afef5cc9721f6ac9a8468b0b051c98993202e4dabb0607dc98720712adc9f567613d3237491a7933881a7efa57f2ff6776b6d49674c24e334ce3d6a006d2b5e7e0d9c6b5253688bd86ba462bd2df37b5ece8a1050b9379f9da0e0fea97868eaaff566d2f5ad34f71456495138244bf983be36be53a90ecc1c2b712bdb123391296a7c770bfff48590 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue