Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
[Share] using draw_snapshot method
-
Below is some code for using the method draw_snapshot in ui Elements/controls. I am sharing this because for a long time I seen this method when I did print(dir(ui.View)) and all other ui objects as they are subclasses of ui.View. but did not know how to use it. I thought I could just do something like -
v = ui.View() img = v.draw_snapshot() img.show()
But you can't. @omz, maybe you should be able to do that.
But below is a way to use it. The snapshot function as you can see will return a ui.image for any ui control passed to it.
There is also a function to write a ui.Image to a file.
Look, this info has been posted in one way or another in the past. I don't mind re-sharing it. Many new users joining here all the time. Also, I am happy to be corrected or shown better ways to do something.
# Phuket2 , Pythonista Forums (Python profiency, not much) # works for python 2 or 3 import ui, editor def _make_button(title): btn = ui.Button() btn.width = 80 btn.height = 32 btn.border_width = .5 btn.title = title return btn def snapshot(obj): # return a ui.Image of the ui element passed (obj) with ui.ImageContext(obj.width, obj.height) as ctx: obj.draw_snapshot() return ctx.get_image() def ui_image_to_file(img, fn): # write ui.Image, img to file fn if not type(img) is ui.Image: print('expected {}, but recieved {}. File not written'.format(ui.Image, type(img))) return False bytes = img.to_png() with open(fn , 'wb') as file: file.write(bytes) return True if __name__ == '__main__': w, h = 600, 800 f = (0, 0, w, h) v = ui.View(frame = f, bg_color = 'lightyellow') y = 10 # add a row of stupid buttons to the view for an example for i in range(5): btn = _make_button('btn ' + str(i)) btn.y = (y + (btn.height * i)) v.add_subview(btn) # draw a view to the console snapshot(btn).show() v.present('sheet') #returns a ui.Image, .show() is to show it in the console img = snapshot(v) img.show() # write a ui.Image to a .png file ui_image_to_file(img, 'somestupidpng.png')
Edited: sorry, the error msg in ui_image_to_file was incomplete, fixed it now