Я использую библиотеку Kivy Python.
У меня есть два виджета.
Когда программа запускается, я запускаю первый виджет.
Когда эта кнопка виджетов нажата, я хочу, чтобы она исчезла и была заменена вторым виджетом.
Вот .kv для двух виджетов
#uitest.kv
<TestForm>:
canvas:
Rectangle:
pos: self.center_x, 0
size: 10, self.height
BoxLayout:
size: root.size
padding: 40
Button:
text: 'Hello'
on_release: root.testCallback()
<TestForm2>:
canvas:
Rectangle:
pos: self.center_x, 0
size: self.height, 10
Мой основной файл python запускает приложение и возвращает первый виджет
#main.py
from testform import TestForm
from kivy.app import App
class UITestApp(App):
def build(self):
return TestForm()
# Main launching point
if __name__ in ('__main__', '__android__'):
UITestApp().run()
Мой первый виджет имеет обратный вызов. Здесь находится рассматриваемый код
from testform2 import TestForm2
from kivy.uix.widget import Widget
class TestForm(Widget):
def testCallback(self):
TestForm2() # Code in question goes here. @TODO replace this widget with TestForm2 widget.
Идея здесь состоит в том, чтобы иметь менеджер пользовательского интерфейса. Этот менеджер управляет пользовательским интерфейсом не как дерево, а как список и стек. Список содержит экземпляры всех моих форм пользовательского интерфейса. Стек содержит обход указанных форм, всякий раз, когда мы переходим к форме, мы помещаем ее в стек и «рендерим» или что-то еще.
EDIT: я выбрал свой ответ, но в своих поисках я также нашел объект Screen: http://kivy.org/docs/api-kivy.uix.screenmanager.html Команды clear() и add() более эффективны, но если вы заинтересованы, то многое зависит от экрана. Эффекты перехода тоже.