Вопрос 1
Как мне создать всплывающее окно, когда я нажимаю на button1?
Решение
В этом решении он иллюстрирует использование динамического класса и включает в себя изменение как файла kv, так и скрипта Python.
файл кв
- Добавить инструкцию по импорту Киви
Factory
- Добавить динамический класс
CustomPopup
с наследованием Popup
widget
- Добавить
on_release
событие для button1, которое использует Kivy Factory
для регистрации и создания экземпляра динамического класса, CustomPopup
. Используйте метод Popup open()
для отображения окна Popup.
Сниппец - кв
#:import Factory kivy.factory.Factory
...
<CustomPopup@Popup>:
...
<Hello>:
Button:
text : "button1"
on_release: Factory.CustomPopup().open()
Py file
- Удалить
btn()
метод из class Hello()
- Добавить
pass
к class Hello()
Отрывки - Py
class Hello(Widget):
pass
Вопрос 2
Как мне написать это всплывающее окно на языке kv?
Решение
Существует два метода реализации класса с наследованием Popup.
В этом методе используются только изменения файла kv. Мы добавили динамическое правило класса.
Сниппец - кв
#:import Factory kivy.factory.Factory
<CustomPopup@Popup>:
title: 'Test popup'
size_hint: (None, None)
size: (400, 400)
Label:
text: 'Hello world'
<Hello>:
Button:
text : "button1"
on_release: Factory.CustomPopup().open()
Метод 2 - Использование нормального класса
В этом методе используются изменения как файла kv, так и скрипта Python. Мы добавили правило класса в файл kv и реализовали класс в скрипте Python.
Сниппец - кв
<CustomPopup>:
title: 'Test popup'
size_hint: (None, None)
size: (400, 400)
Label:
text: 'Hello world'
<Hello>:
Button:
text : "button1"
on_press: root.btn()
Отрывки - Py
from kivy.uix.popup import Popup
...
class CustomPopup(Popup):
pass
class Hello(Widget):
def btn(self):
popup = CustomPopup()
popup.open()
Вопрос 3
Мне нужно большое всплывающее окно, которое содержит так много кнопок и ярлыков.
Решение
В этом решении мы будем использовать динамический класс и добавим кнопки и метки в файл kv. При создании всплывающего окна вы должны как минимум установить Popup.title и Popup.content . Popup.content
может быть любым виджетом, например Экран , Макеты ( BoxLayout , GridLayout и т. Д.), Метка , Кнопка и т. д. С помощью BoxLayout или GridLayout вы можете добавить Label и Button .
Отрывки - кв
#:import Factory kivy.factory.Factory
<CustomPopup@Popup>:
title: 'My Custom Kivy Popup'
auto_dismiss: False
BoxLayout:
orientation: 'vertical'
BoxLayout:
size_hint: 1, 0.9
Label:
text: 'Hello'
Label:
text: 'Kivy'
BoxLayout:
orientation: 'vertical'
Label:
text: 'Linux'
Label:
text: 'Python'
GridLayout:
rows: 1
row_force_default: True
row_default_height: '46dp'
col_force_default: True
col_default_width: '200dp'
Button:
text: 'Close this popup'
on_release: root.dismiss()
Button:
text: 'Cancel'
on_release: root.dismiss()
<Hello>:
Button:
text : "button1"
on_release: Factory.CustomPopup().open()