diff --git a/ButtonGraphics/RobotBack.png b/ButtonGraphics/RobotBack.png new file mode 100644 index 00000000..dfb51e5a Binary files /dev/null and b/ButtonGraphics/RobotBack.png differ diff --git a/ButtonGraphics/RobotForward.png b/ButtonGraphics/RobotForward.png new file mode 100644 index 00000000..91bdfc06 Binary files /dev/null and b/ButtonGraphics/RobotForward.png differ diff --git a/ButtonGraphics/RobotLeft.png b/ButtonGraphics/RobotLeft.png new file mode 100644 index 00000000..2b3d89e6 Binary files /dev/null and b/ButtonGraphics/RobotLeft.png differ diff --git a/ButtonGraphics/RobotRight.png b/ButtonGraphics/RobotRight.png new file mode 100644 index 00000000..fc7549f1 Binary files /dev/null and b/ButtonGraphics/RobotRight.png differ diff --git a/Demo_Pi_Robotics.py b/Demo_Pi_Robotics.py new file mode 100644 index 00000000..e04d5458 --- /dev/null +++ b/Demo_Pi_Robotics.py @@ -0,0 +1,96 @@ +import PySimpleGUI as sg + +# Robotics design pattern +# Uses Realtime Buttons to simulate the controls for a robot +# Rather than sending a single click when a button is clicked, Realtime Buttons +# send button presses continuously while the button is pressed down. +# Two examples, one using fancy graphics, one plain. + +def RemoteControlExample(): + # Make a form, but don't use context manager + 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) + status_display_elem = sg.T('', justification='center', size=(19,1)) + form_rows = [[sg.Text('Robotics Remote Control')], + [status_display_elem], + [sg.T(' '*10), 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(' '*10), sg.RealtimeButton('Reverse', image_filename=image_backward)], + [sg.T('')], + [sg.Quit(button_color=('black', 'orange'))] + ] + + form.LayoutAndRead(form_rows, non_blocking=True) + + # + # Some place later in your code... + # You need to perform a ReadNonBlocking on your form every now and then or + # else it won't refresh. + # + # your program's main loop + while (True): + # This is the code that reads and updates your window + button, values = form.ReadNonBlocking() + if button is not None: + status_display_elem.Update(button) + else: + status_display_elem.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 + + form.CloseNonBlockingForm() + + +def RemoteControlExample_NoGraphics(): + # Make a form, but don't use context manager + form = sg.FlexForm('Robotics Remote Control', auto_size_text=True) + status_display_elem = sg.T('', justification='center', size=(19,1)) + form_rows = [[sg.Text('Robotics Remote Control')], + [status_display_elem], + [sg.T(' '*10), sg.RealtimeButton('Forward')], + [ sg.RealtimeButton('Left'), sg.T(' '), sg.RealtimeButton('Right')], + [sg.T(' '*10), sg.RealtimeButton('Reverse')], + [sg.T('')], + [sg.Quit(button_color=('black', 'orange'))] + ] + # Display form to user + form.LayoutAndRead(form_rows, non_blocking=True) + + # + # Some place later in your code... + # You need to perform a ReadNonBlocking on your form every now and then or + # else it won't refresh. + # + # your program's main loop + while (True): + # This is the code that reads and updates your window + button, values = form.ReadNonBlocking() + if button is not None: + status_display_elem.Update(button) + else: + status_display_elem.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 + + form.CloseNonBlockingForm() + + + + +# ------------------------------------- main ------------------------------------- +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') + +if __name__ == '__main__': + + main()