如何在 kivymd 中转到第二页 python
How to go to second page in kivymd python
我有登录的第一页,并使用数据库 (sqlite3) 对 .py 文件执行检查。现在的问题是如何在执行检查后转到另一个页面。在这里我使用 sm.windowManager 但它不起作用并给我一个空白页。有什么可以帮助我转到 .py 文件而不是 .kv 文件的其他页面 on_press
代码如下:
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.lang import Builder
import sqlite3
class MainWindow(Screen):
pass
class ReserveWindow(Screen):
pass
class windowManager(ScreenManager):
pass
sm = windowManager()
sm.add_widget(MainWindow(name='Main'))
sm.add_widget(ReserveWindow(name='Reserve'))
class Myapp(MDApp):
connection = None
connection = sqlite3.connect("book.db")
cur = None
def build(self):
return sm
def check(self,ID,password):
connection = sqlite3.connect("book.db")
c = connection.cursor()
c.execute("select mmu_id,password from User where mmu_id =(?) and password = (?)", (ID, password))
exists = c.fetchall()
if exists:
sm.current = 'Reserve'
else:
print("Error: Wrong ID or password.")
Myapp().run()
Myapp.kv
windowManager:
MainWindow:
ReserveWindow:
<MainWindow>:
MDScreen:
md_bg_color : [1,1,1,1]
MDCard :
size_hint : None,None
size : 320,400
pos_hint : {"center_x":.5,"center_y":.5}
elevation : 15
padding: 20
spacing : 30
orientation : 'vertical'
MDLabel :
text : 'Login'
font_style : 'Button'
font_size : 45
halign : 'center'
size_hint_y : None
height : self.texture_size[1]
MDTextFieldRound:
hint_text : 'MMU Id'
id : ID
icon_right : 'account'
size_hint_x : None
width : 240
font_size: 20
pos_hint : {"center_x":.5}
MDTextFieldRound:
hint_text : 'password'
id: password
icon_right : 'eye-off'
size_hint_x : None
width : 240
font_size: 20
pos_hint : {"center_x":.5}
MDRoundFlatButton :
text : 'SIGN-IN'
pos_hint : {"center_x":.5}
font_size : 15
md_bg_color : [118/255,251/255,130/255,1]
theme_text_color: 'Custom'
text_color: [0,0,0,1]
on_press: app.check(ID.text,password.text)
Widget:
size_hint_y : None
height : 15
<ReserveWindow>:
MDScreen:
MDLabel :
text : 'Page 2'
行数:
sm = windowManager()
sm.add_widget(MainWindow(name='Main'))
sm.add_widget(ReserveWindow(name='Reserve'))
构建您的小部件树。但是 kv
文件中的行:
windowManager:
MainWindow:
ReserveWindow:
还构建了一个小部件树(但没有每个 Screen
所需的 name
属性)。
我建议您更改 kv
以包含 names
:
windowManager:
MainWindow:
name: "Main"
ReserveWindow:
name: "Reserve"
并使用它在 App
中构建小部件树:
# sm = windowManager()
# sm.add_widget(MainWindow(name='Main'))
# sm.add_widget(ReserveWindow(name='Reserve'))
class Myapp(MDApp):
connection = None
connection = sqlite3.connect("book.db")
cur = None
def build(self):
sm = Builder.load_file('Myapp.kv')
return sm
def check(self,ID,password):
connection = sqlite3.connect("book.db")
c = connection.cursor()
c.execute("select mmu_id,password from User where mmu_id =(?) and password = (?)", (ID, password))
exists = c.fetchall()
if exists:
self.root.current = 'Reserve'
else:
print("Error: Wrong ID or password.")
请注意,将您的 kv
文件命名为 my.kv
将允许它自动加载,并且您可以完全消除 build()
方法(请参阅 documentation)。但这需要更改您的 check()
方法。
我有登录的第一页,并使用数据库 (sqlite3) 对 .py 文件执行检查。现在的问题是如何在执行检查后转到另一个页面。在这里我使用 sm.windowManager 但它不起作用并给我一个空白页。有什么可以帮助我转到 .py 文件而不是 .kv 文件的其他页面 on_press
代码如下:
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.lang import Builder
import sqlite3
class MainWindow(Screen):
pass
class ReserveWindow(Screen):
pass
class windowManager(ScreenManager):
pass
sm = windowManager()
sm.add_widget(MainWindow(name='Main'))
sm.add_widget(ReserveWindow(name='Reserve'))
class Myapp(MDApp):
connection = None
connection = sqlite3.connect("book.db")
cur = None
def build(self):
return sm
def check(self,ID,password):
connection = sqlite3.connect("book.db")
c = connection.cursor()
c.execute("select mmu_id,password from User where mmu_id =(?) and password = (?)", (ID, password))
exists = c.fetchall()
if exists:
sm.current = 'Reserve'
else:
print("Error: Wrong ID or password.")
Myapp().run()
Myapp.kv
windowManager:
MainWindow:
ReserveWindow:
<MainWindow>:
MDScreen:
md_bg_color : [1,1,1,1]
MDCard :
size_hint : None,None
size : 320,400
pos_hint : {"center_x":.5,"center_y":.5}
elevation : 15
padding: 20
spacing : 30
orientation : 'vertical'
MDLabel :
text : 'Login'
font_style : 'Button'
font_size : 45
halign : 'center'
size_hint_y : None
height : self.texture_size[1]
MDTextFieldRound:
hint_text : 'MMU Id'
id : ID
icon_right : 'account'
size_hint_x : None
width : 240
font_size: 20
pos_hint : {"center_x":.5}
MDTextFieldRound:
hint_text : 'password'
id: password
icon_right : 'eye-off'
size_hint_x : None
width : 240
font_size: 20
pos_hint : {"center_x":.5}
MDRoundFlatButton :
text : 'SIGN-IN'
pos_hint : {"center_x":.5}
font_size : 15
md_bg_color : [118/255,251/255,130/255,1]
theme_text_color: 'Custom'
text_color: [0,0,0,1]
on_press: app.check(ID.text,password.text)
Widget:
size_hint_y : None
height : 15
<ReserveWindow>:
MDScreen:
MDLabel :
text : 'Page 2'
行数:
sm = windowManager()
sm.add_widget(MainWindow(name='Main'))
sm.add_widget(ReserveWindow(name='Reserve'))
构建您的小部件树。但是 kv
文件中的行:
windowManager:
MainWindow:
ReserveWindow:
还构建了一个小部件树(但没有每个 Screen
所需的 name
属性)。
我建议您更改 kv
以包含 names
:
windowManager:
MainWindow:
name: "Main"
ReserveWindow:
name: "Reserve"
并使用它在 App
中构建小部件树:
# sm = windowManager()
# sm.add_widget(MainWindow(name='Main'))
# sm.add_widget(ReserveWindow(name='Reserve'))
class Myapp(MDApp):
connection = None
connection = sqlite3.connect("book.db")
cur = None
def build(self):
sm = Builder.load_file('Myapp.kv')
return sm
def check(self,ID,password):
connection = sqlite3.connect("book.db")
c = connection.cursor()
c.execute("select mmu_id,password from User where mmu_id =(?) and password = (?)", (ID, password))
exists = c.fetchall()
if exists:
self.root.current = 'Reserve'
else:
print("Error: Wrong ID or password.")
请注意,将您的 kv
文件命名为 my.kv
将允许它自动加载,并且您可以完全消除 build()
方法(请参阅 documentation)。但这需要更改您的 check()
方法。