test-kivy-app/kivy_venv/share/kivy-examples/widgets/sequenced_images/main.py

151 lines
5.2 KiB
Python
Raw Normal View History

2024-09-15 12:12:16 +00:00
import kivy
kivy.require('1.0.8')
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from uix.custom_button import AnimatedButton
from kivy.uix.scatter import Scatter
from kivy.properties import ObjectProperty
class gifScatter(Scatter):
def __init__(self, **kwargs):
super(gifScatter, self).__init__()
class zipScatter(Scatter):
def __init__(self, **kwargs):
super(zipScatter, self).__init__()
class jpgScatter(Scatter):
def __init__(self, **kwargs):
super(jpgScatter, self).__init__()
class Right_Frame(GridLayout):
currentObj = ObjectProperty(None)
def __init__(self, **kwargs):
super(Right_Frame, self).__init__()
def on_value(self, *l):
if self.currentObj:
if abs(l[1]) <= 0:
self.currentObj.anim_delay = -1
l[2].text = 'Animation speed: %f FPS' % 0
else:
self.currentObj.anim_delay = 1 / l[1]
l[2].text = 'Animation speed: %f FPS' % (
1 / self.currentObj.anim_delay)
else:
l[0].max = 0
l[2].text = 'No Image selected'
class mainclass(FloatLayout):
currentObj = ObjectProperty(None)
def __init__(self, **kwargs):
super(mainclass, self).__init__()
# initialize variables
self.sign = .10
# setup Layouts
layout = GridLayout(size_hint=(1, 1), cols=3, rows=1)
left_frame = GridLayout(size_hint=(.25, 1), cols=1)
client_frame = FloatLayout(size_hint=(1, 1))
self.right_frame = Right_Frame()
# setup buttons in left frame
but_load_gif = AnimatedButton(text='load gif', halign='center')
but_load_zip_png = AnimatedButton(text='load zipped\n png/s',
halign='center')
but_load_zip_jpg = AnimatedButton(text='load zipped\n jpg/s',
halign='center')
but_animated = AnimatedButton(text='animated button\n'
'made using\nSequenced Images\n press to animate',
halign='center',
background_normal='data/images/button_white.png',
background_down='data/images/button_white_animated.zip')
but_animated_normal = AnimatedButton(text='borderless\n'
'animated button\npress to stop',
halign='center',
background_down='data/images/button_white.png',
background_normal='data/images/button_white_animated.zip')
but_animated_borderless = AnimatedButton(text='Borderless',
background_normal='data/images/info.png',
background_down='data/images/info.zip', halign='center')
but_animated_bordered = AnimatedButton(text='With Border',
background_normal='data/images/info.png',
background_down='data/images/info.zip', halign='center')
# Handle button press/release
def load_images(*l):
if l[0].text == 'load gif' or l[0].text == 'load gif\n from cache':
l[0].text = 'load gif\n from cache'
sctr = gifScatter()
if (l[0].text == 'load zipped\n png/s' or
l[0].text == 'load zipped\n png/s from cache'):
l[0].text = 'load zipped\n png/s from cache'
sctr = zipScatter()
if (l[0].text == 'load zipped\n jpg/s' or
l[0].text == 'load zipped\n jpg/s from cache'):
l[0].text = 'load zipped\n jpg/s from cache'
sctr = jpgScatter()
client_frame.add_widget(sctr, 1)
# position scatter
sctr.pos = (240 + self.sign, 200 + self.sign)
self.sign += 10
if self.sign > 200:
self.sign = 10
sctr.pos = (300, 200 - self.sign)
# bind function on on_release
but_load_gif.bind(on_release=load_images)
but_load_zip_png.bind(on_release=load_images)
but_load_zip_jpg.bind(on_release=load_images)
# add widgets to left frame
left_frame.add_widget(but_load_gif)
left_frame.add_widget(but_load_zip_png)
left_frame.add_widget(but_load_zip_jpg)
left_frame.add_widget(but_animated)
left_frame.add_widget(but_animated_normal)
left_frame.add_widget(but_animated_borderless)
left_frame.add_widget(but_animated_bordered)
# set/remove border for borderless widgets (16,16,16,16) by default
but_animated_normal.border = \
but_animated_borderless.border = (0, 0, 0, 0)
# add widgets to the main layout
layout.add_widget(left_frame)
layout.add_widget(client_frame)
layout.add_widget(self.right_frame)
# add main layout to root
self.add_widget(layout)
def on_currentObj(self, *l):
self.right_frame.currentObj = self.currentObj
class mainApp(App):
def build(self):
upl = mainclass()
upl.size_hint = (1, 1)
upl.pos_hint = {'top': 0, 'right': 1}
return upl
if __name__ == '__main__':
mainApp().run()