Kivy python ライブラリを使用しています。
2 つのウィジェットが定義されています。
プログラムが実行されると、最初のウィジェットが実行されます。
そのウィジェット ボタンが押されると、消えて 2 番目のウィジェットに置き換えられます。
2 つのウィジェットの .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.
ここでのアイデアは、ユーザー インターフェイス マネージャーを用意することです。このマネージャーは、UI をツリーのように実行するのではなく、リストとスタックのように実行します。リストには、すべての UI フォームのインスタンスが保持されます。スタックは、前述のフォームのトラバーサルを保持します。フォームにジャンプするたびに、それをスタックにプッシュして「レンダリング」します。
編集: 私は自分の答えを選びましたが、私の検索では Screen オブジェクトも見つかりました: http://kivy.org/docs/api-kivy.uix.screenmanager.html 個人的には、clear() および add() コマンドがより強力ですが、興味がある場合は、画面がその多くを手放します. トランジション効果も。