[[oktatas:programozás:python:kivy|< Kivy]]
====== A KV nyelv ======
* **Szerző:** Sallai András
* Copyright (c) 2020, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== A KV nyelvről =====
A KV nyelv lehetővé teszi, hogy az alkalmazás kinézetét külön fájlban határozzuk meg.
from kivy.app import App
from kivy.uix.button import Button
class TesztApp(App):
def build(self):
btn = Button()
return btn
def csinal(self):
self.title ='valami'
TesztApp().run()
Nem határoztuk meg a btn kinézetét.
Vesszük a TesztApp osztályt, "App" nélkül,
**kisbetűssé alakítjuk**, marad teszt szó.
Ebből készítünk egy teszt.kv nevű
fájlt, amiben leírjuk a Button kinézetét:
===== KV fájl más forrásból =====
A .kv fájl persze lehet máshol és más néven. Ekkor használjuk a
következő formát:
Builder.load_file('utvonal/fajlnev.kv')
from kivy.app import App
from kivy.lang.builder import Builder
class OrarendApp(App):
def build(self):
return Builder.load_file('main.kv')
OrarendApp().run()
Screen:
BoxLayout:
Button:
Button:
A main.kv tartalma, olyan mintha ezt írtam volna:
screen = Screen()
box = BoxLayout()
box.add_widget(Button())
box.add_widget(Button())
screen.add_widget(box)
===== BoxLayout orientáció =====
Az előző példánkban a gombok horizontálisan vannak elrendezve.
Nézzünk, hogyan állítjuk be vertikális elrendezést.
Screen:
BoxLayout:
orientation: 'vertical'
Button:
Button:
===== Button feliratok =====
Az előző fejezetet folytatva, most adjunk gombjainak, feliratokat.
Screen:
BoxLayout:
orientation: 'vertical'
Button:
text: 'Első'
Button:
text: 'Második'
===== KV eseménykezelés =====
Ebben a példában, csak az eseménykezelést fogjuk .kv fájlban végezni.
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
class Box1(BoxLayout):
btnOne = Button()
btnTwo = Button()
btnCal = Button()
txtOne = TextInput()
def calc(self, txt):
txt.text = "Más"
class TesztApp(App):
def build(self):
return Box1()
def csinal(self):
self.title ='valami'
def vissza_csinal(self):
self.title ='eredeti'
TesztApp().run()
:
Button:
text: 'Vált'
on_press: app.csinal()
Button:
text: 'Vissza'
on_press: app.vissza_csinal()
Button:
text: 'Beállít'
on_press: root.calc(txt)
TextInput:
id: txt
text: 'kezdés'
===== Doboz a dobozban =====
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
class Box1(BoxLayout):
btnOne = Button()
btnTwo = Button()
btnCal = Button()
txtOne = TextInput()
def calc(self, txt):
txt.text = "Más"
class Box2(BoxLayout):
btnOne = Button()
btnTwo = Button()
btnCal = Button()
txtOne = TextInput()
def calc(self, txt):
txt.text = "Más"
class RootBox(BoxLayout):
box1 = Box1()
box2 = Box2()
class TesztApp(App):
def build(self):
return RootBox()
def csinal(self):
self.title ='valami'
def vissza_csinal(self):
self.title ='eredeti'
TesztApp().run()
:
Button:
text: 'Vált'
on_press: app.csinal()
Button:
text: 'Vissza'
on_press: app.vissza_csinal()
Button:
text: 'Beállít'
on_press: root.calc(txt)
TextInput:
id: txt
text: 'kezdés'
:
Button:
text: 'Vált újra'
on_press: app.csinal()
Button:
text: 'Vissza újra'
on_press: app.vissza_csinal()
Button:
text: 'Beállít'
on_press: root.calc(txt)
TextInput:
id: txt
text: 'kezdés'
:
BoxLayout:
orientation: 'vertical'
Box1:
Box2: