diff --git a/Demo_Cookbook_Browser.py b/Demo_Cookbook_Browser.py index 2442e5b0..99a1fbee 100644 --- a/Demo_Cookbook_Browser.py +++ b/Demo_Cookbook_Browser.py @@ -274,7 +274,7 @@ def RealtimeButtons(): import PySimpleGUI as sg # Make a form, but don't use context manager - form = sg.FlexForm('Robotics Remote Control', auto_size_text=True) + form = sg.FlexForm('Robotics Remote Control', auto_size_text=True, grab_anywhere=False) form_rows = [[sg.Text('Robotics Remote Control')], [sg.T(' ' * 10), sg.RealtimeButton('Forward')], @@ -431,10 +431,9 @@ def ScriptLauncher(): def ExecuteCommandSubprocess(command, *args): try: - # expanded_args = [] - # for a in args: - # expanded_args += a - expanded_args = [*args] + expanded_args = [] + for a in args: + expanded_args += a sp = subprocess.Popen([command,expanded_args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = sp.communicate() if out: @@ -757,8 +756,8 @@ fig_dict = {'Simple Data Entry':SimpleDataEntry, 'Simple Entry Return Data as Di listbox_values = [key for key in fig_dict.keys()] while True: - sg.ChangeLookAndFeel('Dark') - sg.SetOptions(element_padding=(0,0)) + # sg.ChangeLookAndFeel('Dark') + # sg.SetOptions(element_padding=(0,0)) col_listbox = [[sg.Listbox(values=listbox_values, size=(max(len(x) for x in listbox_values),len(listbox_values)), change_submits=True, key='func')], [sg.SimpleButton('Run', pad=((30,0),0)), sg.Exit(button_color=('white', 'firebrick4'))]] diff --git a/Demo_NonBlocking_Form.py b/Demo_NonBlocking_Form.py index 05006d16..09071a6b 100644 --- a/Demo_NonBlocking_Form.py +++ b/Demo_NonBlocking_Form.py @@ -97,9 +97,9 @@ def StatusOutputExample_context_manager(): form.CloseNonBlockingForm() def main(): - StatusOutputExample() RemoteControlExample() StatusOutputExample() + StatusOutputExample() sg.MsgBox('End of non-blocking demonstration') # StatusOutputExample_context_manager() diff --git a/Demo_Pi_Robotics.py b/Demo_Pi_Robotics.py index 23c7c501..e7efa24b 100644 --- a/Demo_Pi_Robotics.py +++ b/Demo_Pi_Robotics.py @@ -8,19 +8,22 @@ import PySimpleGUI as sg def RemoteControlExample(): # Make a form, but don't use context manager + sg.SetOptions(element_padding=(0,0)) back ='#eeeeee' image_forward = 'ButtonGraphics/RobotForward.png' image_backward = 'ButtonGraphics/RobotBack.png' image_left = 'ButtonGraphics/RobotLeft.png' image_right = 'ButtonGraphics/RobotRight.png' + sg.SetOptions(border_width=0, button_color=('black', back), background_color=back, element_background_color=back, text_element_background_color=back) + form = sg.FlexForm('Robotics Remote Control', auto_size_text=True, grab_anywhere=False) - status_display_elem = sg.T('', justification='center', size=(19,1)) + form_rows = [[sg.Text('Robotics Remote Control')], - [status_display_elem], - [sg.T(' '*6), sg.RealtimeButton('Forward', image_filename=image_forward)], - [ sg.RealtimeButton('Left', image_filename=image_left), sg.T(' '), sg.RealtimeButton('Right', image_filename=image_right)], - [sg.T(' '*6), sg.RealtimeButton('Reverse', image_filename=image_backward)], + [sg.T('', justification='center', size=(19,1), key='status')], + [ sg.RealtimeButton('Forward', image_filename=image_forward, pad=((50,0),0))], + [ sg.RealtimeButton('Left', image_filename=image_left), sg.RealtimeButton('Right', image_filename=image_right, pad=((50,0), 0))], + [ sg.RealtimeButton('Reverse', image_filename=image_backward, pad=((50,0),0))], [sg.T('')], [sg.Quit(button_color=('black', 'orange'))] ] @@ -37,9 +40,9 @@ def RemoteControlExample(): # This is the code that reads and updates your window button, values = form.ReadNonBlocking() if button is not None: - status_display_elem.Update(button) + form.FindElement('status').Update(button) else: - status_display_elem.Update('') + form.FindElement('status').Update('') # if user clicked quit button OR closed the form using the X, then break out of loop if button == 'Quit' or values is None: break @@ -50,11 +53,11 @@ def RemoteControlExample(): def RemoteControlExample_NoGraphics(): # Make a form, but don't use context manager form = sg.FlexForm('Robotics Remote Control', auto_size_text=True, grab_anywhere=False) - status_display_elem = sg.T('', justification='center', size=(19,1)) + form_rows = [[sg.Text('Robotics Remote Control', justification='center')], - [status_display_elem], + [sg.T('', justification='center', size=(19,1), key='status')], [sg.T(' '*8), sg.RealtimeButton('Forward')], - [ sg.RealtimeButton('Left'), sg.T(' '), sg.RealtimeButton('Right')], + [ sg.RealtimeButton('Left'), sg.T(' '), sg.RealtimeButton('Right')], [sg.T(' '*8), sg.RealtimeButton('Reverse')], [sg.T('')], [sg.Quit(button_color=('black', 'orange'))] @@ -72,9 +75,9 @@ def RemoteControlExample_NoGraphics(): # This is the code that reads and updates your window button, values = form.ReadNonBlocking() if button is not None: - status_display_elem.Update(button) + form.FindElement('status').Update(button) else: - status_display_elem.Update('') + form.FindElement('status').Update('') # if user clicked quit button OR closed the form using the X, then break out of loop if button == 'Quit' or values is None: break @@ -89,7 +92,7 @@ def main(): RemoteControlExample_NoGraphics() # Uncomment to get the fancy graphics version. Be sure and download the button images! RemoteControlExample() - sg.MsgBox('End of non-blocking demonstration') + # sg.Popup('End of non-blocking demonstration') if __name__ == '__main__': diff --git a/Demo_Script_Launcher.py b/Demo_Script_Launcher.py index 9c7f65c8..9260ff2c 100644 --- a/Demo_Script_Launcher.py +++ b/Demo_Script_Launcher.py @@ -3,12 +3,16 @@ import glob import ntpath import subprocess -LOCATION_OF_YOUR_SCRIPTS = 'C:/Python/PycharmProjects/GooeyGUI/' +LOCATION_OF_YOUR_SCRIPTS = '' # Execute the command. Will not see the output from the command until it completes. def execute_command_blocking(command, *args): + expanded_args = [] + for a in args: + expanded_args.append(a) + # expanded_args += a try: - sp = subprocess.Popen([command,*args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + sp = subprocess.Popen([command,expanded_args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = sp.communicate() if out: print(out.decode("utf-8")) @@ -20,8 +24,11 @@ def execute_command_blocking(command, *args): # Executes command and immediately returns. Will not see anything the script outputs def execute_command_nonblocking(command, *args): + expanded_args = [] + for a in args: + expanded_args += a try: - sp = subprocess.Popen([command,*args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + sp = subprocess.Popen([command,expanded_args], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except: pass def Launcher2(): diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 94eea372..33368996 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -815,12 +815,16 @@ class Button(Element): super().__init__(ELEM_TYPE_BUTTON, scale=scale, size=size, font=font, pad=pad, key=key) return + # Realtime button release callback def ButtonReleaseCallBack(self, parm): r, c = self.Position + self.LastButtonClickedWasRealtime = False self.ParentForm.LastButtonClicked = None + # Realtime button callback def ButtonPressCallBack(self, parm): r, c = self.Position + self.ParentForm.LastButtonClickedWasRealtime = True self.ParentForm.LastButtonClicked = self.ButtonText # ------- Button Callback ------- # @@ -1468,6 +1472,7 @@ class FlexForm: self.ReturnValuesDictionary = {} self.DictionaryKeyCounter = 0 self.LastButtonClicked = None + self.LastButtonClickedWasRealtime = False self.UseDictionary = False self.UseDefaultFocus = use_default_focus self.ReturnKeyboardEvents = return_keyboard_events @@ -1936,7 +1941,8 @@ def BuildResults(form, initialize_only, top_level_form): form.ReturnValuesDictionary = {} form.ReturnValuesList = [] BuildResultsForSubform(form, initialize_only, top_level_form) - top_level_form.LastButtonClicked = None + if not top_level_form.LastButtonClickedWasRealtime: + top_level_form.LastButtonClicked = None return form.ReturnValues def BuildResultsForSubform(form, initialize_only, top_level_form):