[英]How to start kivy app with arguments from another kivy app
我希望文本輸入中的變量在啟動時傳遞給另一個 class。 So I have a class that is a loginscreen (done with python with kivy), when the user enters it's username I want this to be passed along to another class (in a different.py file) so that the newly started class will be able用它的名字問候用戶。
我該怎么做呢?
login_screen.py:
from kivy.app import App
import user_specific_greeting_screen
class LoginUser():
def__init__(self):
pass
def login(self):
username_to_pass_on = self.user.text
self.canvas.clear()
user_specific_greeting_screen.ReturnApp2().run() # <---- Want to pass var:
# username_to_pass_on
class ReturnApp1(App):
def build(self):
return LoginUser()
if __name__ == '__main__':
ReturnApp1().run()
返回app1.kv:
<LoginUser>:
user: user_kv
BoxLayout:
orientation: 'vertical'
rows: 2
BoxLayout:
TextInput:
id: user_kv
hint_text: 'input username'
BoxLayout:
Button:
text: 'Login'
on_press: root.login()
user_specific_greeting_screen.py
from kivy.app import App
class UserGreet():
def __init__(self):
self.label.text = 'Hello ' + username_i_want_passed # <--- Want username inserted
# here from app_1.py
class ReturnApp2(App):
def build(self):
return UserGreet()
if __name__ == '__main__':
ReturnApp2().run()
返回app2.kv:
<UserGreet>:
label: label_kv
Label:
id: label_kv
我希望代碼能解釋我想做的事情。 另外,我是否在整體上“正確”地考慮這個問題? 我的意思是一個.py 文件用於登錄屏幕,另一個用於用戶特定的問候屏幕等? 目前正在學習 kivy 和 python 和編程。
提前致謝!
而不是制作 2 個不同的 python 和 kivy 文件,您應該使用 Kivy 中的ScreenManager()
。 這允許您創建多個Screen()
,每個在一個應用程序中都有自己的一組小部件。
Python 文件 (main.py)
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
class LoginUserScreen(Screen):
username_to_pass_on = ""
def login(self):
self.username_to_pass_on = self.ids["user_kv"].text
self.canvas.clear()
self.manager.current = "UserGreetScreen"
class UserGreetScreen(Screen):
def on_enter(self):
self.ids["label_kv"].text = 'Hello ' + self.manager.get_screen("LoginUserScreen").username_to_pass_on
class MyApp(App):
def build(self):
Builder.load_file("styling.kv")
sm = ScreenManager()
sm.add_widget(LoginUserScreen())
sm.add_widget(UserGreetScreen())
return sm
MyApp().run()
Kivy 文件 (styling.kv)
#:kivy 1.11.1
<LoginUserScreen>:
name: "LoginUserScreen"
BoxLayout:
orientation: 'vertical'
rows: 2
BoxLayout:
TextInput:
id: user_kv
hint_text: 'input username'
BoxLayout:
Button:
text: 'Login'
on_press: root.login()
<UserGreetScreen>:
name: "UserGreetScreen"
Label:
id: label_kv
注意事項:
label: label_kv
,可以直接self.ids["<widget id>"]
)self.manager.current = "ScreenName"
切換屏幕username_to_pass_on
,這是屏幕的一個屬性,允許從任何其他屏幕輕松訪問ScreenManager()
,將畫面一一添加,最后返回管理器。self.manager.get_screen("ScreenName").property
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.