Kivy - Сохранение значений объекта изменилось во всплывающем окне, так что после закрытия, когда я снова открываю всплывающее окно, оно открывается с новыми значениями - PullRequest
1 голос
/ 18 февраля 2020

Я хочу изменить некоторые метки кнопок класса во всплывающем окне и сохранить новую метку после повторного открытия всплывающего окна. Если вы запустите мое приложение, вы увидите, что после нажатия кнопки «Нажми меня» появляется всплывающее окно с кнопкой с надписью «По умолчанию», после нажатия которой оно меняет метку на «Новая». Я хочу закрыть всплывающее окно, нажмите кнопку «Нажми меня» и во всплывающем окне увидите кнопку с надписью «Новый».

Мой .py файл

from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.app import App
from kivy.uix.widget import Widget

import time

Window.clearcolor = (1, 1, 1, 1)
Window.size = (800, 480)

class MyGrid(Widget):
    def btn(self):
        show_popup(T, "Window")


class T(FloatLayout):
    pass

def show_popup(tab, name): 
    show = tab()
    popupWindow = Popup(title = name, content = show, size_hint = (None,None), size = (800,384), auto_dismiss = True)
    popupWindow.open()
    return popupWindow

class TimeApp(App):
    def build(self):
        return MyGrid()



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

мой файл .kv

<MyGrid>    
    Button:
        text: "Press me"
        on_press: root.btn()


<T>:
    Button:
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        text: "Default"
        on_press: self.text = "New"

1 Ответ

0 голосов
/ 18 февраля 2020

Один из способов сделать это - сохранить ссылку на всплывающее окно.
Сторона py:

Window.clearcolor = (1, 1, 1, 1)
Window.size = (800, 480)


class MyGrid(Widget):

    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)
        self.popupWindow = Popup(content=T(), size_hint=(None, None),
                                 size=(800, 384), auto_dismiss=True)

    def btn(self):
        self.show_popup("Window")

    def show_popup(self, name):
        self.popupWindow.title = name
        self.popupWindow.open()


class T(FloatLayout):
    pass


class TimeApp(App):
    def build(self):
        return MyGrid()


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