Kivy je open source knižnica nástrojov pre platformne nezávislé (MacOSX, Linux, Windows, Android, iOS), „multy-touch“, GUI aplikácie.
Programovací jazyk – python
GUI interface – OpenGL
zdroj: http://kivy.org/
Ukážka jednoduchej aplikácie (okno s jedným tlačítkom):
(main.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import kivy kivy.require('1.0.6') from kivy.uix.boxlayout import BoxLayout from kivy.app import App from kivy.uix.button import Button class Controller2(BoxLayout): def __init__(self, **kwargs): super(Controller2, self).__init__(**kwargs) self.padding = 20 button = Button(text='button') self.add_widget(button) class Controller2App(App): def build(self): return Controller2() if __name__ == '__main__': Controller2App().run() |
Ten istý príklad s použitím "kivy language". Konfiguračný súbor (*.kv), popisujúci užívateľské rozhranie a interakcie umožňuje oddeliť zdrojový kód od kódu určujúceho vzhľad UI.
(main.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import kivy kivy.require('1.0.6') from kivy.uix.boxlayout import BoxLayout from kivy.app import App from kivy.lang import Builder class Controller(BoxLayout): pass class ControllerApp(App): def build(self): return Controller() if __name__ == '__main__': ControllerApp().run() |
(controller.kv)
1 2 3 4 5 6 7 8 9 | #:kivy 1.0
<Controller>:
BoxLayout:
padding: 20
Button:
text: 'button'
|
Print screen jednoduchej app. na rôznych platformách t.j. jeden zdrojový kód (viď. nižšie) interpretovaný pod troma platformami (OS X nebol k dispozícii :-)
Linux Debian - GNOME 3:
Windows 7:
Android 4.0:
(main.py)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import kivy kivy.require('1.0.5') from kivy.uix.gridlayout import GridLayout from kivy.app import App from kivy.uix.button import Button from kivy.uix.textinput import TextInput from kivy.uix.label import Label from kivy.uix.image import Image class MyClass(GridLayout): def __init__(self): super(MyClass, self).__init__() def my_callback(self, obj): print 'My button <%s> state is <%s>' % (self, obj) textOutput.text = textInput.text self.cols = 2 self.padding = 200 self.spacing = 10 self.row_force_default = True self.row_default_height = 40 wimg = Image( source='Logo.png', size_hint_x=None, width=200 ) textOutput1 = Label( size_hint_x=None, width=100 ) textInput = TextInput( multiline=False, size_hint_x=None, width=200 ) button = Button( text='Push', size_hint_x=None, width=100 ) textOutput = Label( size_hint_x=None, width=200 ) button.bind(state = my_callback) self.add_widget(wimg) self.add_widget(textOutput1) self.add_widget(textInput) self.add_widget(button) self.add_widget(textOutput) class MyClassApp(App): def build(self): return MyClass() if __name__ == '__main__': MyClassApp().run() |
Výhody:
- open source
- skutočne jednotný kód pre všetky podporované platformy
- jednoduchá tvorba GUI rozhrania
- jednotný vzhľad GUI na všetkých platformách (dá sa považovať aj za nevýhodu, tak ako u JAVA app.)
- podpora periférií mob. zariadení (multy-touch, kamera, telefón,... )
- dobra dokumentácia (400 stranové pdf) a aktívna komunita
Nevýhody:
- vyžaduje OpenGL od verzie 2.0 napriek tomu že táto verzia je vonku už od 2004, mnohé PC s OS Win XP majú GPU, ktorých ovládače ešte stále nepodporujú OpenGL 2.0 a už s najväčšou pravdepodobnosťou ani nebudú podporovať
- jednotný vzhľad GUI, ktorý je silne orientovaný na mob. aplikácie (čierno – čierny šat aplikácie)
- minimálna veľkosť aplikácie po nainštalovaní na OS Android mala 20MB (predpokladám že veľkosť app. lineárne nenarastá so zložitosťou samotnej app., ale aj tak je to dosť).
Záver:
Zaujímavý nástroj pre rýchlu a jednoduchú tvorbu GUI multiplatformových aplikácii, ktorý ale asi potrebuje ešte trošku vyzrieť a to nie len po komunitnej stránke.