Kivy Screen Manager и всплывающее окно - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть приложение в kivy с менеджером экрана и всплывающее окно внутри него. Всплывающее окно работает до тех пор, пока я не вставлю кнопку с функцией закрытия во всплывающее окно. В этот момент я получаю сообщение:

PopupException: Popup can have only one widget as content

В этой теме есть еще один пост, но он не работает.

Код питона

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.lang import Builder
from kivy.uix.popup import Popup

class CustomPopup(Popup):
    pass

class MainScreen(Screen):
    pass

class ContentScreen(Screen):

    def open_popup(self):
        the_popup = CustomPopup()
        the_popup.open()

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("am.kv")

class AMApp(App):

    def build(self):
        return presentation

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

Файл KIVY находится ниже. Проблема возникает в функции кнопки при вызове custompop

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    ContentScreen:

<CustomPopup>:
    size_hint: .5 , .5
    auto_dismiss: False
    title: "The Popup"
    Button:
        text: "Close"
        on_press: root.dismiss()

<MainScreen>:
    name: "Welcome"
    Button:
        text: "First Screen"
        size_hint: 1, .5
        font_size: 40
        pos_hint: {'center_x': 0.5, 'center_y': 0.7}
        on_release: app.root.current = "other"

    Button:
        text: 'Welcome Mr and Mrs Shaw'
        size_hint: 1, .5
        font_size: 25
        pos_hint: {'center_x': 0.5, 'center_y': 0.3}
        on_release: app.root.current = "other"

<ContentScreen>:
    name: "other"
    BoxLayout:
        orientation: "vertical"
        size_hint_x: .22
        Button:
            text: "open Popup"
            on_press: root.open_popup()

1 Ответ

0 голосов
/ 24 апреля 2019

Код, размещенный выше, отлично работает на Linux Buster, Kivy 1.11.0-dev и 1.10.1 и Python 3.7.3rc1

Решение

Попробуйте добавить макет, например BoxLayout в CustomPopup, чтобы решить PopupException.

Пример

В следующем примере показано всплывающее окно с сообщением и кнопкой.

Отрывки

<CustomPopup>:
    size_hint: .5 , .5
    auto_dismiss: False
    title: "The Popup"
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: "Hello Kivy"
        Button:
            text: "Close"
            on_press: root.dismiss()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...