A GridLayout egy elrendező osztály, tehát arra való, hogy más elemek elhelyezhetőek legyenek rajta. Ezek az elemek egy tetszőleges meretű négyzetrácson jelennek meg. A példa programmal kipróbálható, hogy milyen elrendezést eredményez a "cols", "rows" és "orientation" paraméterek megváltoztatása.
attribútum |
típus |
leírás |
cols |
int |
Oszlopok száma |
rows |
int |
Sorok száma |
orientation |
str |
A feltöltés sorrendjét meghatárazó érték. Kötöjellel elválasztva külön fel-le, és a jobb-bal feltöltés iránya. (Alapértelmezett: lr-tb lr: balról jobbra, tb: fentről le) |
from itertools import count
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
def generate_index(index_set: set[int]) -> int:
index: int = next(i for i in count() if i not in index_set)
index_set.add(index)
return index
class GridLayoutExample(App):
def build(self):
base = GridLayout(cols=1)
layout = GridLayout(cols=4, rows=5, size_hint=(1.0, 5.0))
controls = GridLayout(cols=2)
inputs = GridLayout(cols=2)
sep = " "
index_set = set()
inputs.add_widget(Label(text="orientation:"))
inputs.add_widget(TextInput(text=layout.orientation, multiline=False, on_text_validate=lambda text_input: setattr(layout, "orientation", text_input.text)))
inputs.add_widget(Label(text="columns and rows"))
inputs.add_widget(TextInput(text=f"{layout.cols}{sep}{layout.rows}", multiline=False, on_text_validate=lambda text_input: [setattr(layout, attr, val) for attr, val in zip(["cols", "rows"], map(int, text_input.text.split(sep)))]))
controls.add_widget(inputs)
controls.add_widget(Button(text="Add button", on_release=lambda _: layout.add_widget(Button(text=str(generate_index(index_set)), on_release=lambda button: [layout.remove_widget(button), index_set.remove(int(button.text))])), size_hint=(0.5, 1.0)))
base.add_widget(controls)
base.add_widget(layout)
return base
if __name__ == "__main__":
GridLayoutExample().run()