Merge pull request #3872 from PySimpleGUI/Dev-latest

Dev latest
This commit is contained in:
PySimpleGUI 2021-02-03 15:49:19 -05:00 committed by GitHub
commit 59775b847f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 11 deletions

View File

@ -6,6 +6,8 @@ from PIL import ImageGrab
This demo shows how to use a Graph Element to (optionally) display an image and then use the This demo shows how to use a Graph Element to (optionally) display an image and then use the
mouse to "drag" and draw rectangles and circles. mouse to "drag" and draw rectangles and circles.
Copyright 2020 PySimpleGUI.org
""" """
def save_element_as_file(element, filename): def save_element_as_file(element, filename):
@ -35,7 +37,7 @@ def main():
[sg.R('Send to back', 1, key='-BACK-', enable_events=True)], [sg.R('Send to back', 1, key='-BACK-', enable_events=True)],
[sg.R('Bring to front', 1, key='-FRONT-', enable_events=True)], [sg.R('Bring to front', 1, key='-FRONT-', enable_events=True)],
[sg.R('Move Everything', 1, key='-MOVEALL-', enable_events=True)], [sg.R('Move Everything', 1, key='-MOVEALL-', enable_events=True)],
[sg.R('Move Stuff', 1, True, key='-MOVE-', enable_events=True)], [sg.R('Move Stuff', 1, key='-MOVE-', enable_events=True)],
[sg.B('Save Image', key='-SAVE-')], [sg.B('Save Image', key='-SAVE-')],
] ]
@ -46,8 +48,8 @@ def main():
key="-GRAPH-", key="-GRAPH-",
enable_events=True, enable_events=True,
background_color='lightblue', background_color='lightblue',
drag_submits=True), sg.Col(col) ], drag_submits=True), sg.Col(col, key='-COL-') ],
[sg.Text(key='info', size=(60, 1))]] [sg.Text(key='-INFO-', size=(60, 1))]]
window = sg.Window("Drawing and Moving Stuff Around", layout, finalize=True) window = sg.Window("Drawing and Moving Stuff Around", layout, finalize=True)
@ -58,17 +60,17 @@ def main():
dragging = False dragging = False
start_point = end_point = prior_rect = None start_point = end_point = prior_rect = None
graph.bind('<Button-3>', '+RIGHT+') graph.bind('<Button-3>', '+RIGHT+')
while True: while True:
event, values = window.read() event, values = window.read()
print(event, values) print(event, values)
if event == sg.WIN_CLOSED: if event == sg.WIN_CLOSED:
break # exit break # exit
if event in ('-MOVE-', '-MOVEALL-'): if event in ('-MOVE-', '-MOVEALL-'):
graph.Widget.config(cursor='fleur') graph.set_cursor(cursor='fleur') # not yet released method... coming soon!
# graph.set_cursor(cursor='fleur') # not yet released method... coming soon!
elif not event.startswith('-GRAPH-'): elif not event.startswith('-GRAPH-'):
# graph.set_cursor(cursor='left_ptr') # not yet released method... coming soon! graph.set_cursor(cursor='left_ptr') # not yet released method... coming soon!
graph.Widget.config(cursor='left_ptr')
if event == "-GRAPH-": # if there's a "Graph" event, then it's a mouse if event == "-GRAPH-": # if there's a "Graph" event, then it's a mouse
x, y = values["-GRAPH-"] x, y = values["-GRAPH-"]
@ -109,12 +111,15 @@ def main():
elif values['-BACK-']: elif values['-BACK-']:
for fig in drag_figures: for fig in drag_figures:
graph.send_figure_to_back(fig) graph.send_figure_to_back(fig)
window["-INFO-"].update(value=f"mouse {values['-GRAPH-']}")
elif event.endswith('+UP'): # The drawing has ended because mouse up elif event.endswith('+UP'): # The drawing has ended because mouse up
info = window["info"] window["-INFO-"].update(value=f"grabbed rectangle from {start_point} to {end_point}")
info.update(value=f"grabbed rectangle from {start_point} to {end_point}")
start_point, end_point = None, None # enable grabbing a new rect start_point, end_point = None, None # enable grabbing a new rect
dragging = False dragging = False
prior_rect = None prior_rect = None
elif event.endswith('+RIGHT+'): # Righ click
window["-INFO-"].update(value=f"Right clicked location {values['-GRAPH-']}")
elif event == '-SAVE-': elif event == '-SAVE-':
# filename = sg.popup_get_file('Choose file (PNG, JPG, GIF) to save to', save_as=True) # filename = sg.popup_get_file('Choose file (PNG, JPG, GIF) to save to', save_as=True)
filename=r'test.jpg' filename=r'test.jpg'

View File

@ -1,5 +1,5 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.34.0.14 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search, files_delimiter added to FilesBrowse & popup_get_file, SDK help sort by case, popup_get_file fixed default_extension not being passed to button correctly, changed themes so that spaces can be used in defined name, addition of subprocess non-blocking launcher, fix for Debug button color, set_option for default user_settings path to override normal default, define a truly global PySimpleGUI settings path, theme_global() gets the theme for all progams, execute_subprocess_nonblocking bug fix, mark when strout/stderr is restored in multiline elem, Listbox element convert values to list when updated, Column will expand row if y expand set to True, Added color/c parm to debug print, update graph coordinates if a user bound event happens" version = __version__ = "4.34.0.15 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search, files_delimiter added to FilesBrowse & popup_get_file, SDK help sort by case, popup_get_file fixed default_extension not being passed to button correctly, changed themes so that spaces can be used in defined name, addition of subprocess non-blocking launcher, fix for Debug button color, set_option for default user_settings path to override normal default, define a truly global PySimpleGUI settings path, theme_global() gets the theme for all progams, execute_subprocess_nonblocking bug fix, mark when strout/stderr is restored in multiline elem, Listbox element convert values to list when updated, Column will expand row if y expand set to True, Added color/c parm to debug print, update graph coordinates if a user bound event happens, another attempt at graphs with user events"
__version__ = version.split()[0] # For PEP 396 and PEP 345 __version__ = version.split()[0] # For PEP 396 and PEP 345
@ -1067,7 +1067,7 @@ class Element():
key_suffix = self.user_bind_dict.get(bind_string, '') key_suffix = self.user_bind_dict.get(bind_string, '')
self.user_bind_event = event self.user_bind_event = event
if self.Type == ELEM_TYPE_GRAPH: if self.Type == ELEM_TYPE_GRAPH:
self.button_press_call_back(event) self._user_bound_event_callback(event)
if self.Key is not None: if self.Key is not None:
if isinstance(self.Key, str): if isinstance(self.Key, str):
key = self.Key + str(key_suffix) key = self.Key + str(key_suffix)
@ -5078,6 +5078,19 @@ class Graph(Element):
_exit_mainloop(self.ParentForm) _exit_mainloop(self.ParentForm)
self.MouseButtonDown = True self.MouseButtonDown = True
# user bound event callback
def _user_bound_event_callback(self, event):
"""
Not a user callable method. Indirectly called by tkinter when any user bound event happens
:param event: (event) event info from tkinter. Contains the x and y coordinates of a click
"""
self.ClickPosition = self._convert_canvas_xy_to_xy(event.x, event.y)
self.ParentForm.LastButtonClickedWasRealtime = self.DragSubmits
# button callback # button callback
def motion_call_back(self, event): def motion_call_back(self, event):
""" """