omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    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.


    [Lab] a animated ui.button - but for snippets

    Pythonista
    lab ui.button snippet
    1
    1
    1455
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Phuket2
      Phuket2 last edited by

      Playing with the idea of how to share snippet functions Vrs something more substantial. I mean in the forum it could be tagged [snippet] the idea being it could be a handy function to save as a snippet. Well maybe [Share] is good enough. Just thinking out aloud. But a snippet function is a little different as it should not have source dependencies. But also you would like some test code written around it, to show how to call it and prove it works.

      Anyway, been a strange evening, my mind went to this. Just food for thought.

      # Pythonista Forum - @Phuket2
      import ui
      
      # this function is the snippet
      def pop_btn(*args, **kwargs):
      	def pop_effect(sender, duration=.4, scale=1.25):
      		x = y = scale
      		
      		def a():
      			sender.transform = ui.Transform()
      			
      		def c():
      			sender.enabled = True
      			
      		sender.transform = ui.Transform.scale(x, y)
      		ui.animate(a, duration=duration, completion=c)
      		
      	def btn_action(sender):
      		sender.enabled = False
      		pop_effect(sender, scale=2)
      		if sender.callback:
      			sender.callback(sender)
      	
      	# do some normal initialisation
      	btn = ui.Button(name='btn', frame=(0, 0, 100, 32))
      	btn.title = btn.name
      	btn.border_width = .5
      	btn.callback = None
      	btn.action = btn_action
      	
      	# if round = True is passed we make a round button
      	round = kwargs.pop('round', False)
      	if round:
      		btn.corner_radius = btn.width / 2
      		
      	btn.callback = kwargs.pop('action', None)
      	
      	for k, v in kwargs.items():
      		if hasattr(btn, k):
      			setattr(btn, k, v)
      			
      	return btn
      			
      def dummy_action(sender):
      	print('in dummy action', sender, sender.name)
      	
      class MyClass(ui.View):
      	def __init__(self, *args, **kwargs):
      		super().__init__(*args, **kwargs)
      		
      		btn = pop_btn(width=100, height=100,
      		round=True, action=dummy_action, title='Hit Me',
      		bg_color='teal', tint_color='white')
      		
      		btn.center = self.bounds.center()
      		self.add_subview(btn)
      
      if __name__ == '__main__':
      	_use_theme = False
      	w, h = 320, 480
      	f = (0, 0, w, h)
      	
      	mc = MyClass(frame=f, bg_color='white')
      	mc.present('sheet', animated=False)
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Powered by NodeBB Forums | Contributors