Загрузка данных
# модуль 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()