Загрузка данных


# модуль Button_Otklik1.py
from kivy.app import App
from kivy.uix.button import Button

class MainApp(App):
    def build(self):
        button = Button(text="Кнопка",
                        size_hint=(.5, .5),
                        pos_hint={'center_x': .5, 'center_y': .5})
        button.bind(on_press=self.press_button)
        return button

    def press_button(self, instance):
        print("Вы нажали на кнопку!")

MainApp().run()
```[span_1](start_span)[span_1](end_span)

---

#### Листинг 2.47. Явное связывание визуального элемента с функцией отклика на действия пользователя (модуль `Button_Otklik11.py`)
```python
# модуль Button_Otklik11.py
from kivy.app import App
from kivy.lang import Builder

KV = """
Button:
    text: "Кнопка"
    size_hint: .5, .5
    pos_hint: {'center_x': .5, 'center_y': .5}
    on_press: app.press_button(root)
"""

class MainApp(App):
    def build(self):
        return Builder.load_string(KV)

    def press_button(self, instance):
        print("Вы нажали на кнопку!")

MainApp().run()
```[span_2](start_span)[span_2](end_span)

---

#### Листинг 2.48. Неявное связывание визуального элемента с функцией отклика на действия пользователя (модуль `Button_Otklik2.py`)
```python
# модуль Button_Otklik2.py
from kivy.app import App
from kivy.uix.button import Button

class Basic_Class1(App):
    def build(self):
        button = Button(text="Кнопка",
                        size_hint=(.5, .5),
                        pos_hint={'center_x': .5, 'center_y': .5})
        return button

    def press_button(self):
        print("Вы нажали на кнопку!")

My_App = Basic_Class1() # приложение на основе базового класса
My_App.run() # запуск приложения
```[span_3](start_span)[span_3](end_span)

#### Листинг 2.49. Содержание файла `basic_class1.kv` (модуль `basic_class1.kv`)
```kv
# файл basic_class1.kv
<Button>:
    on_press: app.press_button()
```[span_4](start_span)[span_4](end_span)

---

#### Листинг 2.50. Пример создания дерева виджетов на Python (модуль `K_Tree_1.py`)
```python
# модуль K_Tree_1.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.screenmanager import Screen

class MainApp(App):
    def build(self):
        scr = Screen() # корневой виджет (экран)
        box = BoxLayout() # контейнер box
        but1 = Button(text="Кнопка 1") # кнопка 1
        but2 = Button(text="Кнопка 2") # кнопка 2
        box.add_widget(but1) # положить кнопку 1 в контейнер
        box.add_widget(but2) # положить кнопку 2 в контейнер
        scr.add_widget(box) # положить контейнер в корневой виджет
        return scr

MainApp().run()
```[span_5](start_span)[span_5](end_span)

---

#### Листинг 2.51. Пример создания дерева виджетов на Python (модуль `K_Tree_2.py`)
```python
# модуль K_Tree_2.py
from kivy.app import App
from kivy.lang import Builder

KV = """
Screen: # создание корневого виджета (экран)
    BoxLayout: # создание контейнера BoxLayout
        Button: # добавление в контейнер виджета Button (кнопка)
            text: "Кнопка 1"
        Button: # добавление в контейнер виджета Button (кнопка)
            text: "Кнопка 2"
"""

class MainApp(App):
    def build(self):
        return Builder.load_string(KV)

MainApp().run()
```[span_6](start_span)[span_6](end_span)

---

### Задание 2. Индивидуальные задачи: Вариант №13

#### Задача 1: Программа «Прозрачность или тон»
**Условие:** 
* `Screen` $\rightarrow$ горизонтальный `BoxLayout`.
* Слева — изображение `Image`.
* Справа — колонка (`BoxLayout`) с бегунком `Slider` (диапазон `0..1`, по умолчанию `1.0`), выключателем `Switch` и меткой `Label`.
* Цвет (`color`) изображения привязан выражением с условием: при включённом выключателе четвёртый компонент кортежа RGBA берётся из бегунка (прозрачность/alpha: `(1, 1, 1, slider.value)`), иначе первые три компонента берутся из бегунка (серый тон: `(slider.value, slider.value, slider.value, 1)`).
* Метка условием называет текущий режим («Режим: прозрачность» / «Режим: серый тон»).

```python
from kivy.app import App
from kivy.lang import Builder

KV = """
Screen:
    BoxLayout:
        orientation: "horizontal"
        padding: 10
        spacing: 10

        Image:
            id: img
            source: "image.png"  # укажите путь к вашему изображению
            size_hint_x: 0.65
            # При включенном Switch меняется альфа-канал, иначе оттенок серого (RGB)
            color: (1, 1, 1, slider.value) if sw.active else (slider.value, slider.value, slider.value, 1)

        BoxLayout:
            orientation: "vertical"
            size_hint_x: 0.35
            spacing: 15
            padding: 10

            Label:
                text: "Режим: Прозрачность" if sw.active else "Режим: Серый тон"
                font_size: 16
                size_hint_y: None
                height: 40

            Label:
                text: f"Значение: {slider.value:.2f}"
                size_hint_y: None
                height: 30

            Slider:
                id: slider
                min: 0.0
                max: 1.0
                value: 1.0
                step: 0.01

            BoxLayout:
                orientation: "horizontal"
                size_hint_y: None
                height: 50

                Label:
                    text: "Вкл. прозрачность:"
                    halign: "left"
                    valign: "middle"
                    text_size: self.size

                Switch:
                    id: sw
                    active: False
                    size_hint_x: None
                    width: 70
"""

class TransparencyToneApp(App):
    def build(self):
        return Builder.load_string(KV)

if __name__ == "__main__":
    TransparencyToneApp().run()