commit
e5305422ce
|
@ -1478,7 +1478,7 @@ class Button(Element):
|
|||
self.AutoSizeButton = auto_size_button
|
||||
self.BType = button_type
|
||||
self.FileTypes = file_types
|
||||
self.TKButton = None
|
||||
self.TKButton = None # type: tk.Button
|
||||
self.Target = target
|
||||
self.ButtonText = str(button_text)
|
||||
if sys.platform == 'darwin' and button_color is not None:
|
||||
|
@ -2013,7 +2013,7 @@ class Graph(Element):
|
|||
self.BottomLeft = graph_bottom_left
|
||||
self.TopRight = graph_top_right
|
||||
self._TKCanvas = None
|
||||
self._TKCanvas2 = None
|
||||
self._TKCanvas2 = None # Type: tk.Canvas
|
||||
self.ChangeSubmits = change_submits or enable_events
|
||||
self.DragSubmits = drag_submits
|
||||
self.ClickPosition = (None, None)
|
||||
|
@ -2230,6 +2230,19 @@ class Graph(Element):
|
|||
return None
|
||||
self._TKCanvas2.move(figure, shift_amount[0], shift_amount[1])
|
||||
|
||||
|
||||
def RelocateFigure(self, figure, x, y):
|
||||
zero_converted = self._convert_xy_to_canvas_xy(0, 0)
|
||||
shift_converted = self._convert_xy_to_canvas_xy(x, y)
|
||||
shift_amount = (shift_converted[0] - zero_converted[0], shift_converted[1] - zero_converted[1])
|
||||
if figure is None:
|
||||
print('*** WARNING - Your figure is None. It most likely means your did not Finalize your Window ***')
|
||||
print('Call Window.Finalize() prior to all graph operations')
|
||||
return None
|
||||
xy = self._TKCanvas2.coords(figure)
|
||||
self._TKCanvas2.move(figure, shift_converted[0]-xy[0], shift_converted[1]-xy[1])
|
||||
|
||||
|
||||
@property
|
||||
def TKCanvas(self):
|
||||
if self._TKCanvas2 is None:
|
||||
|
@ -4994,6 +5007,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
|||
tktext_label.bind('<Button-3>', element.RightClickMenuCallback)
|
||||
# ------------------------- BUTTON element ------------------------- #
|
||||
elif element_type == ELEM_TYPE_BUTTON:
|
||||
element = element # type: Button
|
||||
stringvar = tk.StringVar()
|
||||
element.TKStringVar = stringvar
|
||||
element.Location = (row_num, col_num)
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
![Python Version](https://img.shields.io/badge/Python-3.x-yellow.svg)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_For_Python_3.x_Version-00.26.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_For_Python_3.x_Version-00.26431.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
|||
"Qt without the ugly"
|
||||
|
||||
|
||||
## The Alpha Release
|
||||
## The Alpha Release Version 0.231.0
|
||||
[Announcements of Latest Developments](https://github.com/MikeTheWatchGuy/PySimpleGUI/issues/142)
|
||||
|
||||
|
||||
|
@ -683,3 +683,6 @@ Dial - disable
|
|||
GNU Lesser General Public License (LGPL 3) +
|
||||
|
||||
# Acknowledgments
|
||||
<!--stackedit_data:
|
||||
eyJoaXN0b3J5IjpbLTQwNDYzOTE3Nl19
|
||||
-->
|
|
@ -70,7 +70,7 @@ def TimerStop():
|
|||
"""
|
||||
|
||||
# Because looks matter...
|
||||
DEFAULT_BASE64_ICON = b'iVBORw0KGgoAAAANSUhEUgAAACEAAAAgCAMAAACrZuH4AAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAMGmYMGqZMWqaMmubMmycM22dNGuZNm2bNm6bNG2dN26cNG6dNG6eNW+fN3CfOHCeOXGfNXCgNnGhN3KiOHOjOXSjOHSkOnWmOnamOnanPHSiPXakPnalO3eoPnimO3ioPHioPHmpPHmqPXqqPnurPnusPnytP3yuQHimQnurQn2sQH2uQX6uQH6vR32qRn+sSXujSHynTH2mTn+nSX6pQH6wTIGsTYKuTYSvQoCxQoCyRIK0R4S1RYS2Roa4SIe4SIe6SIi7Soq7SYm8SYq8Sou+TY2/UYStUYWvVIWtUYeyVoewUIi0VIizUI6+Vo+8WImxXJG5YI2xZI+xZ5CzZJC0ZpG1b5a3apW4aZm/cZi4dJ2/eJ69fJ+9XZfEZZnCZJzHaZ/Jdp/AeKTI/tM8/9Q7/9Q8/9Q9/9Q+/tQ//9VA/9ZA/9ZB/9ZC/9dD/9ZE/tdJ/9dK/9hF/9hG/9hH/9hI/9hJ/9hK/9lL/9pK/9pL/thO/9pM/9pN/9tO/9tP/9xP/tpR/9xQ/9xR/9xS/9xT/91U/91V/t1W/95W/95X/95Y/95Z/99a/99b/txf/txh/txk/t5l/t1q/t5v/+Bb/+Bc/+Bd/+Be/+Bf/+Bg/+Fh/+Fi/+Jh/+Ji/uJk/uJl/+Jm/+Rm/uJo/+Ro/+Rr/+Zr/+Vs/+Vu/+Zs/+Zu/uF0/uVw/+dw/+dz/+d2/uB5/uB6/uJ9/uR7/uR+/uV//+hx/+hy/+h0/+h2/+l4/+l7/+h8gKXDg6vLgazOhKzMiqrEj6/KhK/Qka/Hk7HJlLHJlLPMmLTLmbbOkLXSmLvXn77XoLrPpr/Tn8DaocLdpcHYrcjdssfZus/g/uOC/uOH/uaB/uWE/uaF/uWK/+qA/uqH/uqI/uuN/uyM/ueS/ueW/ueY/umQ/uqQ/uuS/uuW/uyU/uyX/uqa/uue/uye/uyf/u6f/uyq/u+r/u+t/vCm/vCp/vCu/vCy/vC2/vK2/vO8/vO/wtTjwtXlzdrl/vTA/vPQAAAAiNpY5gAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAAFw8AABcPASe7rwsAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuMWMqnEsAAAKUSURBVDhPhdB3WE1xHMdxt5JV0dANoUiyd8kqkey996xclUuTlEKidO3qVnTbhIyMW/bee5NskjJLmR/f3++cK/94vP76Ps/n/Zx7z6mE/6koJowcK154vvHOL/GsKCZXkUgkWlf4vWGWq5tsDz+JWIzSokAiqXGe7nWu3HxhEYof7fhOqp1GtptQuMruVhQdxZ05U5G47tYUHbQ4oah6Fg9Z4ubm7i57JhQjdHS0RSzUPoG17u6zZTKZh8c8XlytqW9YWUOH1LqFOZ6enl5ec+XybFb0rweM1tPTM6yuq6vLs0lYJJfLvb19fHwDWGF0jh5lYNAe4/QFemOwxtfXz8/fPyBgwVMqzAcCF4ybAZ2MRCexJGBhYGBQUHDw4u1UHDG1G2ZqB/Q1MTHmzAE+kpCwL1RghlTaBt/6SaXS2kx9YH1IaOjSZST8vfA9JtoDnSngGgL7wkg4WVkofA9mcF1Sx8zMzBK4v3wFiYiMVLxlEy9u21syFhYNmgN7IyJXEYViNZvEYoCVVWOmUVvgQVSUQqGIjolRFvOAFd8HWVs34VoA+6OjY2JjY5Vxm4BC1UuhGG5jY9OUaQXci1MqlfHx8YmqjyhOViW9ZsUN29akJRmPFwkJCZsTSXIpilJffXiTzorLXYgtcxRJKpUqKTklJQ0oSt9FP/EonxVdNY4jla1kK4q2ZB6mIr+AipvduzFUzMSOtLT09IyMzMxtJKug/F0u/6dTexAWDcXXLGEjapKjfsILOLKEuYiSnTQeYCt3UHhbwEHjGMrETfBJU5zq5dSTcXC8hLJccSWP2cgLXHPu7cQNAcpyxF1dyjehAKb0cSYUAOXCUw6V8OFPgevTXFymC+fPPLU677Nw/1X8A/AbfAKGulaqFlIAAAAASUVORK5CYII='
|
||||
DEFAULT_BASE64_ICON = 'iVBORw0KGgoAAAANSUhEUgAAACEAAAAgCAMAAACrZuH4AAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAMGmYMGqZMWqaMmubMmycM22dNGuZNm2bNm6bNG2dN26cNG6dNG6eNW+fN3CfOHCeOXGfNXCgNnGhN3KiOHOjOXSjOHSkOnWmOnamOnanPHSiPXakPnalO3eoPnimO3ioPHioPHmpPHmqPXqqPnurPnusPnytP3yuQHimQnurQn2sQH2uQX6uQH6vR32qRn+sSXujSHynTH2mTn+nSX6pQH6wTIGsTYKuTYSvQoCxQoCyRIK0R4S1RYS2Roa4SIe4SIe6SIi7Soq7SYm8SYq8Sou+TY2/UYStUYWvVIWtUYeyVoewUIi0VIizUI6+Vo+8WImxXJG5YI2xZI+xZ5CzZJC0ZpG1b5a3apW4aZm/cZi4dJ2/eJ69fJ+9XZfEZZnCZJzHaZ/Jdp/AeKTI/tM8/9Q7/9Q8/9Q9/9Q+/tQ//9VA/9ZA/9ZB/9ZC/9dD/9ZE/tdJ/9dK/9hF/9hG/9hH/9hI/9hJ/9hK/9lL/9pK/9pL/thO/9pM/9pN/9tO/9tP/9xP/tpR/9xQ/9xR/9xS/9xT/91U/91V/t1W/95W/95X/95Y/95Z/99a/99b/txf/txh/txk/t5l/t1q/t5v/+Bb/+Bc/+Bd/+Be/+Bf/+Bg/+Fh/+Fi/+Jh/+Ji/uJk/uJl/+Jm/+Rm/uJo/+Ro/+Rr/+Zr/+Vs/+Vu/+Zs/+Zu/uF0/uVw/+dw/+dz/+d2/uB5/uB6/uJ9/uR7/uR+/uV//+hx/+hy/+h0/+h2/+l4/+l7/+h8gKXDg6vLgazOhKzMiqrEj6/KhK/Qka/Hk7HJlLHJlLPMmLTLmbbOkLXSmLvXn77XoLrPpr/Tn8DaocLdpcHYrcjdssfZus/g/uOC/uOH/uaB/uWE/uaF/uWK/+qA/uqH/uqI/uuN/uyM/ueS/ueW/ueY/umQ/uqQ/uuS/uuW/uyU/uyX/uqa/uue/uye/uyf/u6f/uyq/u+r/u+t/vCm/vCp/vCu/vCy/vC2/vK2/vO8/vO/wtTjwtXlzdrl/vTA/vPQAAAAiNpY5gAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAJcEhZcwAAFw8AABcPASe7rwsAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuMWMqnEsAAAKUSURBVDhPhdB3WE1xHMdxt5JV0dANoUiyd8kqkey996xclUuTlEKidO3qVnTbhIyMW/bee5NskjJLmR/f3++cK/94vP76Ps/n/Zx7z6mE/6koJowcK154vvHOL/GsKCZXkUgkWlf4vWGWq5tsDz+JWIzSokAiqXGe7nWu3HxhEYof7fhOqp1GtptQuMruVhQdxZ05U5G47tYUHbQ4oah6Fg9Z4ubm7i57JhQjdHS0RSzUPoG17u6zZTKZh8c8XlytqW9YWUOH1LqFOZ6enl5ec+XybFb0rweM1tPTM6yuq6vLs0lYJJfLvb19fHwDWGF0jh5lYNAe4/QFemOwxtfXz8/fPyBgwVMqzAcCF4ybAZ2MRCexJGBhYGBQUHDw4u1UHDG1G2ZqB/Q1MTHmzAE+kpCwL1RghlTaBt/6SaXS2kx9YH1IaOjSZST8vfA9JtoDnSngGgL7wkg4WVkofA9mcF1Sx8zMzBK4v3wFiYiMVLxlEy9u21syFhYNmgN7IyJXEYViNZvEYoCVVWOmUVvgQVSUQqGIjolRFvOAFd8HWVs34VoA+6OjY2JjY5Vxm4BC1UuhGG5jY9OUaQXci1MqlfHx8YmqjyhOViW9ZsUN29akJRmPFwkJCZsTSXIpilJffXiTzorLXYgtcxRJKpUqKTklJQ0oSt9FP/EonxVdNY4jla1kK4q2ZB6mIr+AipvduzFUzMSOtLT09IyMzMxtJKug/F0u/6dTexAWDcXXLGEjapKjfsILOLKEuYiSnTQeYCt3UHhbwEHjGMrETfBJU5zq5dSTcXC8hLJccSWP2cgLXHPu7cQNAcpyxF1dyjehAKb0cSYUAOXCUw6V8OFPgevTXFymC+fPPLU677Nw/1X8A/AbfAKGulaqFlIAAAAASUVORK5CYII='
|
||||
|
||||
|
||||
# ----====----====----==== Constants the user CAN safely change ====----====----====----#
|
||||
|
@ -1663,17 +1663,21 @@ class Image(Element):
|
|||
|
||||
class SuperImage(remi.gui.Image):
|
||||
def __init__(self, file_path_name=None, **kwargs):
|
||||
super(SuperImage, self).__init__("/res/logo.png", **kwargs)
|
||||
image = file_path_name
|
||||
super(SuperImage, self).__init__(image, **kwargs)
|
||||
|
||||
self.imagedata = None
|
||||
self.mimetype = None
|
||||
self.encoding = None
|
||||
self.load(file_path_name)
|
||||
self.load(image)
|
||||
|
||||
def load(self, file_path_name):
|
||||
self.mimetype, self.encoding = mimetypes.guess_type(file_path_name)
|
||||
with open(file_path_name, 'rb') as f:
|
||||
self.imagedata = f.read()
|
||||
if type(file_path_name) is bytes or len(file_path_name) > 200:
|
||||
self.imagedata = base64.b64decode(file_path_name)
|
||||
else:
|
||||
self.mimetype, self.encoding = mimetypes.guess_type(file_path_name)
|
||||
with open(file_path_name, 'rb') as f:
|
||||
self.imagedata = f.read()
|
||||
self.refresh()
|
||||
|
||||
def refresh(self):
|
||||
|
@ -1712,6 +1716,7 @@ class Graph(Element):
|
|||
self.MouseButtonDown = False
|
||||
self.Disabled = disabled
|
||||
self.Widget = None # Type: remi.gui.Svg
|
||||
self.SvgGroup = None # Type: remi.gui.SvgGroup
|
||||
super().__init__(ELEM_TYPE_GRAPH, size=canvas_size, size_px=size_px, visible=visible, background_color=background_color, pad=pad, tooltip=tooltip, key=key)
|
||||
return
|
||||
|
||||
|
@ -1745,7 +1750,7 @@ class Graph(Element):
|
|||
return None
|
||||
line = remi.gui.SvgLine(converted_point_from[0], converted_point_from[1], converted_point_to[0], converted_point_to[1])
|
||||
line.set_stroke(width, color)
|
||||
self.Widget.append([line,])
|
||||
self.SvgGroup.append([line,])
|
||||
|
||||
def DrawPoint(self, point, size=2, color='black'):
|
||||
if point == (None, None):
|
||||
|
@ -1755,11 +1760,10 @@ class Graph(Element):
|
|||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||
print('Call Window.Finalize() prior to this operation')
|
||||
return None
|
||||
print(f'Draw Point', point, converted_point)
|
||||
rpoint = remi.gui.SvgCircle(converted_point[0], converted_point[1], size)
|
||||
rpoint.set_stroke(size, color)
|
||||
rpoint.set_fill(color)
|
||||
self.Widget.append([rpoint,])
|
||||
self.SvgGroup.append([rpoint,])
|
||||
return rpoint
|
||||
|
||||
|
||||
|
@ -1771,12 +1775,12 @@ class Graph(Element):
|
|||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||
print('Call Window.Finalize() prior to this operation')
|
||||
return None
|
||||
print(f'Draw Circle', center_location, converted_point)
|
||||
rpoint = remi.gui.SvgCircle(converted_point[0], converted_point[1], radius=radius)
|
||||
rpoint.set_fill(fill_color)
|
||||
self.Widget.append([rpoint,])
|
||||
self.SvgGroup.append([rpoint,])
|
||||
return rpoint
|
||||
|
||||
|
||||
def DrawOval(self, top_left, bottom_right, fill_color=None, line_color=None):
|
||||
converted_top_left = self._convert_xy_to_canvas_xy(top_left[0], top_left[1])
|
||||
converted_bottom_right = self._convert_xy_to_canvas_xy(bottom_right[0], bottom_right[1])
|
||||
|
@ -1808,7 +1812,7 @@ class Graph(Element):
|
|||
rpoint = remi.gui.SvgRectangle(converted_top_left[0], converted_bottom_right[1], bottom_right[0]-top_left[0], top_left[1]-bottom_right[1])
|
||||
rpoint.set_stroke(color=line_color)
|
||||
rpoint.set_fill(fill_color)
|
||||
self.Widget.append([rpoint,])
|
||||
self.SvgGroup.append([rpoint,])
|
||||
return rpoint
|
||||
|
||||
|
||||
|
@ -1823,7 +1827,8 @@ class Graph(Element):
|
|||
return None
|
||||
|
||||
rpoint = remi.gui.SvgText(converted_point[0], converted_point[1], text)
|
||||
self.Widget.append([rpoint,])
|
||||
self.SvgGroup.append([rpoint,])
|
||||
self.SvgGroup.redraw()
|
||||
return rpoint
|
||||
|
||||
|
||||
|
@ -1839,11 +1844,19 @@ class Graph(Element):
|
|||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||
print('Call Window.Finalize() prior to this operation')
|
||||
return None
|
||||
image_widget = SuperImage(image_source)
|
||||
image_widget.attributes['x'] = converted_point[0]
|
||||
image_widget.attributes['y'] = converted_point[1]
|
||||
|
||||
|
||||
rpoint = remi.gui.SvgImage(image_source, converted_point[0], converted_point[0], size[0], size[1])
|
||||
i = int(time.time() * 1e6)
|
||||
# rpoint.set_image(image_source)
|
||||
self.SvgGroup.append([rpoint,])
|
||||
self.SvgGroup.redraw()
|
||||
# image_widget.attributes['x'] = converted_point[0]
|
||||
# image_widget.attributes['y'] = converted_point[1]
|
||||
# image_widget.style['background-repeat'] = 'no-repeat'
|
||||
self.Widget.append([image_widget,])
|
||||
# self.Widget.data = shape
|
||||
# self.Widget.add_child("image", shape)
|
||||
# self.Widget.append([shape,])
|
||||
|
||||
def Erase(self):
|
||||
if self.Widget is None:
|
||||
|
@ -1851,6 +1864,8 @@ class Graph(Element):
|
|||
print('Call Window.Finalize() prior to this operation')
|
||||
return None
|
||||
self.Widget.empty()
|
||||
self.SvgGroup = remi.gui.SvgGroup(0,0)
|
||||
self.Widget.append(self.SvgGroup)
|
||||
|
||||
def Update(self, background_color):
|
||||
if self.Widget is None:
|
||||
|
@ -1864,11 +1879,26 @@ class Graph(Element):
|
|||
zero_converted = self._convert_xy_to_canvas_xy(0, 0)
|
||||
shift_converted = self._convert_xy_to_canvas_xy(x_direction, y_direction)
|
||||
shift_amount = (shift_converted[0] - zero_converted[0], shift_converted[1] - zero_converted[1])
|
||||
if self._TKCanvas2 is None:
|
||||
if self.Widget is None:
|
||||
print('*** WARNING - The Graph element has not been finalized and cannot be drawn upon ***')
|
||||
print('Call Window.Finalize() prior to this operation')
|
||||
return None
|
||||
return # TODO
|
||||
cur_x = float(self.SvgGroup.attributes['x'])
|
||||
cur_y = float(self.SvgGroup.attributes['y'])
|
||||
self.SvgGroup.set_position(cur_x - x_direction,cur_y - y_direction)
|
||||
self.SvgGroup.redraw()
|
||||
|
||||
|
||||
def Relocate(self, x, y):
|
||||
shift_converted = self._convert_xy_to_canvas_xy(x, y)
|
||||
if self.Widget is None:
|
||||
print('*** WARNING - Your figure is None. It most likely means your did not Finalize your Window ***')
|
||||
print('Call Window.Finalize() prior to all graph operations')
|
||||
return None
|
||||
# figure.empty()
|
||||
self.SvgGroup.set_position(shift_converted[0], shift_converted[1])
|
||||
self.SvgGroup.redraw()
|
||||
|
||||
|
||||
def MoveFigure(self, figure, x_direction, y_direction):
|
||||
figure = figure #type: remi.gui.SvgCircle
|
||||
|
@ -1879,12 +1909,27 @@ class Graph(Element):
|
|||
print('*** WARNING - Your figure is None. It most likely means your did not Finalize your Window ***')
|
||||
print('Call Window.Finalize() prior to all graph operations')
|
||||
return None
|
||||
figure.empty()
|
||||
# figure.empty()
|
||||
cur_x = float(figure.attributes['x'])
|
||||
cur_y = float(figure.attributes['y'])
|
||||
figure.set_position(cur_x - x_direction,cur_y - y_direction)
|
||||
figure.redraw()
|
||||
|
||||
def RelocateFigure(self, figure, x, y):
|
||||
figure = figure #type: remi.gui.SvgCircle
|
||||
zero_converted = self._convert_xy_to_canvas_xy(0, 0)
|
||||
shift_converted = self._convert_xy_to_canvas_xy(x, y)
|
||||
shift_amount = (shift_converted[0] - zero_converted[0], shift_converted[1] - zero_converted[1])
|
||||
if figure is None:
|
||||
print('*** WARNING - Your figure is None. It most likely means your did not Finalize your Window ***')
|
||||
print('Call Window.Finalize() prior to all graph operations')
|
||||
return None
|
||||
# figure.empty()
|
||||
figure.set_position(shift_converted[0], shift_converted[1])
|
||||
figure.redraw()
|
||||
|
||||
|
||||
|
||||
@property
|
||||
def TKCanvas(self):
|
||||
if self._TKCanvas2 is None:
|
||||
|
@ -3299,7 +3344,7 @@ class Window:
|
|||
self.master_widget = None
|
||||
self.window.App = self
|
||||
if userdata2 is None:
|
||||
res_path = os.path.dirname(os.path.abspath(__file__))
|
||||
# res_path = os.path.dirname(os.path.abspath(__file__))
|
||||
# print('res path', res_path)
|
||||
super(Window.MyApp, self).__init__(*args, static_file_path={'C':'c:','c':'c:','D':'d:', 'd':'d:', 'E':'e:', 'e':'e:', 'dot':'.', '.':'.'})
|
||||
|
||||
|
@ -3395,6 +3440,7 @@ def base64_to_style_image(base64_image):
|
|||
x ="url('data:image/png;base64,"
|
||||
x += str(base64_image)
|
||||
x += "')"
|
||||
print(x)
|
||||
return x
|
||||
|
||||
|
||||
|
@ -4551,7 +4597,7 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
|||
elif element_type == ELEM_TYPE_IMAGE:
|
||||
element = element # type: Image
|
||||
# element.Widget = remi.gui.Image(element.Filename)
|
||||
element.Widget = SuperImage(element.Filename)
|
||||
element.Widget = SuperImage(element.Filename if element.Filename is not None else element.Data)
|
||||
do_font_and_color(element.Widget)
|
||||
if element.EnableEvents:
|
||||
element.Widget.onclick.connect(element.ChangedCallback)
|
||||
|
@ -4603,6 +4649,8 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
|
|||
elif element_type == ELEM_TYPE_GRAPH:
|
||||
element = element # type: Graph
|
||||
element.Widget = remi.gui.Svg(width=element.CanvasSize[0], height=element.CanvasSize[1])
|
||||
element.SvgGroup = remi.gui.SvgGroup(0,0)
|
||||
element.Widget.append([element.SvgGroup,])
|
||||
do_font_and_color(element.Widget)
|
||||
if element.ChangeSubmits:
|
||||
element.Widget.onclick.connect(element.ChangedCallback)
|
||||
|
@ -6698,6 +6746,8 @@ def main():
|
|||
[Combo(values=['Combo 1', 'Combo 2', 'Combo 3'], default_value='Combo 2', key='_COMBO_', enable_events=True,
|
||||
readonly=False, tooltip='Combo box', disabled=False, size=(12, 1))],
|
||||
[Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), enable_events =True, size=(10, 3), key='_LIST_')],
|
||||
[Image(filename=r'C:\Python\PycharmProjects\GooeyGUI\logo200.png', enable_events=True)],
|
||||
[Image(data=DEFAULT_BASE64_ICON)],
|
||||
[Slider((1, 100), default_value=80, key='_SLIDER_', visible=True, enable_events=True, orientation='v')],
|
||||
[Spin(values=(1, 2, 3), initial_value='2', size=(4, 1), key='_SPIN_', enable_events=True)],
|
||||
[OK(), Button('Hidden', visible=False, key='_HIDDEN_'), Button('Values'), Button('Exit', button_color=('white', 'red')), Button('UnHide')]
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
![Python Version](https://img.shields.io/badge/Python-3.x-yellow.svg)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_-0.22.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_-0.23.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
|
||||
|
||||
|
@ -297,6 +297,26 @@ New features
|
|||
|
||||
* NEW Window parameter layout so can skip calling Layout
|
||||
|
||||
## 0.23.0 21-Apr-2019 PySimpleGUIWeb
|
||||
|
||||
* GRAPH ELEMENT almost done!
|
||||
* DrawLine
|
||||
* DrawRectangle
|
||||
* DrawPoint
|
||||
* DrawCicle
|
||||
* DrawText
|
||||
* Erase
|
||||
* Move
|
||||
* MoveFigure (by a delta amount)
|
||||
* RelocateFigure (draw to a new spot)
|
||||
* Update - for background color change
|
||||
* Enable events works for single clicks (no drags yet)
|
||||
* Changed Image element to use SuperImage class
|
||||
* Image element works better?
|
||||
* Base64 not yet working
|
||||
|
||||
|
||||
|
||||
# Design
|
||||
# Author
|
||||
Mike B.
|
||||
|
@ -307,6 +327,7 @@ New features
|
|||
|
||||
# Acknowledgments
|
||||
<!--stackedit_data:
|
||||
eyJoaXN0b3J5IjpbLTExNjY3MTk5MTcsNDc1ODY1Njc2LC0xMD
|
||||
U3MTAzNjQzLDEyMTMzNTI2MzYsLTExNjA2ODQzMzldfQ==
|
||||
eyJoaXN0b3J5IjpbNDU1NTc2Mjg4LC0xMTY2NzE5OTE3LDQ3NT
|
||||
g2NTY3NiwtMTA1NzEwMzY0MywxMjEzMzUyNjM2LC0xMTYwNjg0
|
||||
MzM5XX0=
|
||||
-->
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
![Python Version](https://img.shields.io/badge/Python-3.x-yellow.svg)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_For_Python_3.x_Version-0.11.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_For_Python_3.x_Version-0..0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
|
||||
|
||||
|
@ -376,5 +376,6 @@ Starting with release 0.4.0, most of the Popup functions work. This means you c
|
|||
|
||||
# Acknowledgments
|
||||
<!--stackedit_data:
|
||||
eyJoaXN0b3J5IjpbLTIxNDIwNTI0ODQsODg2MzA1Mjk2XX0=
|
||||
eyJoaXN0b3J5IjpbLTEyMzExNjg0MDAsLTIxNDIwNTI0ODQsOD
|
||||
g2MzA1Mjk2XX0=
|
||||
-->
|
|
@ -33,15 +33,15 @@
|
|||
|
||||
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-3.28.0-red.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-3.2.0-red.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-1.28.0-blue.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-1.2.0-blue.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0.26.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0..0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_version-0.11.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_version-0..0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.22.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.2218.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
[Announcements of Latest Developments](https://github.com/MikeTheWatchGuy/PySimpleGUI/issues/142)
|
||||
|
||||
|
@ -4985,10 +4985,10 @@ GNU Lesser General Public License (LGPL 3) +
|
|||
|
||||
#### SORRY!! Will add these back. Lost due to file length limitation
|
||||
<!--stackedit_data:
|
||||
eyJoaXN0b3J5IjpbODY0OTc4NzY1LC0xMDY1OTc4MTI2LDUxOT
|
||||
A1NTk0LDIwNTMxMjUxNDksLTE1Nzg3NDY1ODgsMjYwNTg0ODE0
|
||||
LDExMDIwODgzMzMsMTY3OTg1MDk5MiwtMTQ2MTQyODEsLTYwNj
|
||||
M3MTE4LC01MDkzNTkxMjMsLTI0ODk3NjI5LDEzMDc2OTI1OSwt
|
||||
Mjk2NzgzNTUsLTc3NDA3NDIzMCwyNjYzNjQ0MTcsNDQ5NDMzMj
|
||||
QzLC0xMTQ4NDkwNjIzXX0=
|
||||
eyJoaXN0b3J5IjpbODAxMDU0ODkzLDg2NDk3ODc2NSwtMTA2NT
|
||||
k3ODEyNiw1MTkwNTU5NCwyMDUzMTI1MTQ5LC0xNTc4NzQ2NTg4
|
||||
LDI2MDU4NDgxNCwxMTAyMDg4MzMzLDE2Nzk4NTA5OTIsLTE0Nj
|
||||
E0MjgxLC02MDYzNzExOCwtNTA5MzU5MTIzLC0yNDg5NzYyOSwx
|
||||
MzA3NjkyNTksLTI5Njc4MzU1LC03NzQwNzQyMzAsMjY2MzY0ND
|
||||
E3LDQ0OTQzMzI0MywtMTE0ODQ5MDYyM119
|
||||
-->
|
38
readme.md
38
readme.md
|
@ -33,15 +33,15 @@
|
|||
|
||||
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-3.28.0-red.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-3.29.0-red.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-1.28.0-blue.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-1.29.0-blue.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0.26.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_version-0.11.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWx_version-0..0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.22.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
![Python Version](https://img.shields.io/badge/PySimpleGUIWeb_Version-0.2218.0-orange.svg?longCache=true&style=for-the-badge)
|
||||
|
||||
[Announcements of Latest Developments](https://github.com/MikeTheWatchGuy/PySimpleGUI/issues/142)
|
||||
|
||||
|
@ -3095,6 +3095,7 @@ After you supply those values you can scribble all of over your graph by creatin
|
|||
* DrawPoint
|
||||
* DrawRectangle
|
||||
* DrawOval
|
||||
* DrawImage
|
||||
|
||||
You can move your figures around on the canvas by supplying the Figure ID the x,y amount to move.
|
||||
|
||||
|
@ -3131,6 +3132,7 @@ DeleteFigure(figure_id)
|
|||
Update()
|
||||
Move(self, x_direction, y_direction)
|
||||
MoveFigure(self, figure, x_direction, y_direction)
|
||||
RelocateFigure(self, figure, x, y)
|
||||
TKCanvas
|
||||
```
|
||||
All of the Drawing methods return a "***figure***" that can be used move and delete the figure
|
||||
|
@ -3142,10 +3144,12 @@ DrawOval - draws an oval
|
|||
DrawArc - draws an arc
|
||||
DrawRectangle - draws a rectangle
|
||||
DrawText - draws text
|
||||
DrawImage - places an image onto the graph
|
||||
Erase - erases entire graph
|
||||
Update - changes background color
|
||||
Move - moves everything an x,y direction
|
||||
MoveFigure - moves an individual figure
|
||||
MoveFigure - moves an individual figure by some delta
|
||||
RelocateFigure - moves figure to an absolute location
|
||||
DeleteFigure - delete an individual figure
|
||||
|
||||
|
||||
|
@ -4882,7 +4886,7 @@ Emergency patch release... going out same day as previous release
|
|||
* Combobox Styling (again)
|
||||
|
||||
|
||||
# 3.23.0 PySimpleGUI / 1.23.0 PySimpleGUI27 16-Jan-2019
|
||||
# 3.2.0 PySimpleGUI / 1.23.0 PySimpleGUI27 16-Jan-2019
|
||||
|
||||
* Animated GIFs!
|
||||
* Calendar Chooser stays on top of other windows
|
||||
|
@ -4925,13 +4929,14 @@ Mixup.... 3.26 changes don't appear to have been correctly released so releasing
|
|||
* Convert button text to string when creating buttons
|
||||
* Buttons are returned now as well as input fields when searching for element with focus
|
||||
|
||||
## 3.29 22-Apr-2019
|
||||
|
||||
* New method for `Graph` - `RelocateFigure`
|
||||
* Output Element no longer accepts focus
|
||||
|
||||
### Upcoming
|
||||
Make suggestions people! Future release features
|
||||
|
||||
Port to other graphic engines. Hook up the front-end interface to a backend other than tkinter. Qt, WxPython, etc. At the moment, Wx and Kivy are being considered for the next GUI framework. Work has already begun on Wx. Kivy is likely to be next instead of Wx however.
|
||||
|
||||
|
||||
|
||||
## Code Condition
|
||||
|
||||
|
@ -4972,9 +4977,8 @@ tkinter is the "official" GUI that Python supports. It runs on Windows, Linux,
|
|||
From the start of the PSG project, tkinter was not meant to be the only underlying GUI framework for PySimpleGUI. It is merely a starting point. All journeys begin with one step forward and choosing tkinter was the first of many steps for PySimpleGUI. Now there are 4 ports up and running - tkinter, WxPython, Qt and Remi (web support)
|
||||
|
||||
|
||||
|
||||
## Author
|
||||
MikeB
|
||||
Mike - who wrote PySimpleGUI is not important. It's the software that's important
|
||||
|
||||
|
||||
## License
|
||||
|
@ -4985,10 +4989,10 @@ GNU Lesser General Public License (LGPL 3) +
|
|||
|
||||
#### SORRY!! Will add these back. Lost due to file length limitation
|
||||
<!--stackedit_data:
|
||||
eyJoaXN0b3J5IjpbODY0OTc4NzY1LC0xMDY1OTc4MTI2LDUxOT
|
||||
A1NTk0LDIwNTMxMjUxNDksLTE1Nzg3NDY1ODgsMjYwNTg0ODE0
|
||||
LDExMDIwODgzMzMsMTY3OTg1MDk5MiwtMTQ2MTQyODEsLTYwNj
|
||||
M3MTE4LC01MDkzNTkxMjMsLTI0ODk3NjI5LDEzMDc2OTI1OSwt
|
||||
Mjk2NzgzNTUsLTc3NDA3NDIzMCwyNjYzNjQ0MTcsNDQ5NDMzMj
|
||||
QzLC0xMTQ4NDkwNjIzXX0=
|
||||
eyJoaXN0b3J5IjpbMTIxNjg5MDM1Niw4NjQ5Nzg3NjUsLTEwNj
|
||||
U5NzgxMjYsNTE5MDU1OTQsMjA1MzEyNTE0OSwtMTU3ODc0NjU4
|
||||
OCwyNjA1ODQ4MTQsMTEwMjA4ODMzMywxNjc5ODUwOTkyLC0xND
|
||||
YxNDI4MSwtNjA2MzcxMTgsLTUwOTM1OTEyMywtMjQ4OTc2Mjks
|
||||
MTMwNzY5MjU5LC0yOTY3ODM1NSwtNzc0MDc0MjMwLDI2NjM2ND
|
||||
QxNyw0NDk0MzMyNDMsLTExNDg0OTA2MjNdfQ==
|
||||
-->
|
Loading…
Reference in New Issue