使用屏幕管理器在屏幕之间切换
use screen manager to switch between screens
我正在尝试在按下按钮后执行屏幕切换。但在屏幕切换之前,我想验证用户名和密码。我正在使用 python 和一个 kv 文件。我是新手,所以非常感谢任何帮助
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.scrollview import ScrollView
class MainScreen(Screen):
def login(self, uname_txt, pin_txt):
uname_txt = self.ids.uname_txt
uname_text = uname_txt
pin_txt= self.ids.pin_txt
pin_text = pin_txt
if uname_text == "test" and pin_text == "test":
self.parent.current = 'homepage'
else:
uname_text == ""
pin_text == ""
Kv 文件:
Button:
size_hint_y: None
height: 90
text: 'Logged users'
#on_release: app.root.current = ''
Button:
size_hint_y: None
height: 90
text:'create user'
on_press: app.root.login(uname_txt,pin_txt)
解决方案是使用ScreenManager、id、root.manager等,如下例所示。
例子
main.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
class ScreenManagement(ScreenManager):
pass
class MainScreen(Screen):
def login(self, uname_txt, pin_txt):
if uname_txt == "test" and pin_txt == "test":
self.parent.current = 'homepage'
class HomePage(Screen):
pass
class TestApp(App):
title = "Login Screen"
def build(self):
return ScreenManagement()
if __name__ == "__main__":
TestApp().run()
test.kv
#:kivy 1.10.0
<ScreenManagement>:
MainScreen:
id: main
HomePage:
<MainScreen>:
name: "main_screen"
GridLayout:
size_hint: (0.5, 0.5)
pos_hint: {"center_x": 0.5, "center_y": 0.6}
cols: 2
padding: 20
Label:
size_hint: (0.2, 0.2)
text: "User Name"
font_size: 30
text_size: self.size
valign: "middle"
TextInput:
id: username
size_hint: (0.2, 0.06)
cursor_blink: True
font_size: 20
multiline: False
Label:
size_hint: (0.2, 0.2)
text:"Pin:"
font_size: 30
text_size: self.size
valign: "middle"
TextInput:
id: pin
size_hint: (0.2, 0.06)
cursor_blink: True
font_size: 20
multiline: False
password: True
Button:
size_hint_y: None
height: 90
text: 'Logged users'
Button:
size_hint_y: None
height: 90
text:'Create user'
on_press: root.manager.ids.main.login(username.text, pin.text)
<HomePage>:
name: "homepage"
BoxLayout:
orientation: "vertical"
Label:
text: "Home Page"
Button:
text: "Go to main screen"
size_hint_y: 0.1
on_press: root.manager.current = "main_screen"
输出
我正在尝试在按下按钮后执行屏幕切换。但在屏幕切换之前,我想验证用户名和密码。我正在使用 python 和一个 kv 文件。我是新手,所以非常感谢任何帮助
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.scrollview import ScrollView
class MainScreen(Screen):
def login(self, uname_txt, pin_txt):
uname_txt = self.ids.uname_txt
uname_text = uname_txt
pin_txt= self.ids.pin_txt
pin_text = pin_txt
if uname_text == "test" and pin_text == "test":
self.parent.current = 'homepage'
else:
uname_text == ""
pin_text == ""
Kv 文件:
Button:
size_hint_y: None
height: 90
text: 'Logged users'
#on_release: app.root.current = ''
Button:
size_hint_y: None
height: 90
text:'create user'
on_press: app.root.login(uname_txt,pin_txt)
解决方案是使用ScreenManager、id、root.manager等,如下例所示。
例子
main.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
class ScreenManagement(ScreenManager):
pass
class MainScreen(Screen):
def login(self, uname_txt, pin_txt):
if uname_txt == "test" and pin_txt == "test":
self.parent.current = 'homepage'
class HomePage(Screen):
pass
class TestApp(App):
title = "Login Screen"
def build(self):
return ScreenManagement()
if __name__ == "__main__":
TestApp().run()
test.kv
#:kivy 1.10.0
<ScreenManagement>:
MainScreen:
id: main
HomePage:
<MainScreen>:
name: "main_screen"
GridLayout:
size_hint: (0.5, 0.5)
pos_hint: {"center_x": 0.5, "center_y": 0.6}
cols: 2
padding: 20
Label:
size_hint: (0.2, 0.2)
text: "User Name"
font_size: 30
text_size: self.size
valign: "middle"
TextInput:
id: username
size_hint: (0.2, 0.06)
cursor_blink: True
font_size: 20
multiline: False
Label:
size_hint: (0.2, 0.2)
text:"Pin:"
font_size: 30
text_size: self.size
valign: "middle"
TextInput:
id: pin
size_hint: (0.2, 0.06)
cursor_blink: True
font_size: 20
multiline: False
password: True
Button:
size_hint_y: None
height: 90
text: 'Logged users'
Button:
size_hint_y: None
height: 90
text:'Create user'
on_press: root.manager.ids.main.login(username.text, pin.text)
<HomePage>:
name: "homepage"
BoxLayout:
orientation: "vertical"
Label:
text: "Home Page"
Button:
text: "Go to main screen"
size_hint_y: 0.1
on_press: root.manager.current = "main_screen"