Monday, January 14, 2013

Kivy, (že by) skutočný multiplatformový framework?


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:

Jednotný zdrojový kód ukážkovej aplikácie interpretovaný vo všetkých platfomách:

(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.

1 comment: