Как записать всплывающее окно в файл kv при нажатии одной кнопки - PullRequest
0 голосов
/ 19 апреля 2019
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.factory import Factory

class My3App(App):
    def build(self):
        return Hello()


class Hello(Widget):
    def btn(self):
        pass


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



kv File

<Hello>:
    Button:
        text : "button1"
        on_press : root.btn()

Как мне создать всплывающее окно, когда я нажимаю на button1? Я хочу большое всплывающее окно, которое содержит так много кнопок и ярлыков. Как мне написать это всплывающее окно на языке kv?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Вопрос 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.

Метод 1 - Использование Динамический класс

В этом методе используются только изменения файла 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()
0 голосов
/ 19 апреля 2019

Вы должны проверить этот учебник: https://kivy.org/doc/stable/api-kivy.uix.popup.html

MyPopup = Popup(title='Test popup', content=Label(text='Hello world'),
          auto_dismiss=False
Button:
    text: 'Open popup'
    on_release: Factory.MyPopup().open()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...