我有一个简单的应用程序,用户必须输入用户名和密码才能进入第二个屏幕。为此,我使用sqlite。
*Py
class LoginPage(Screen):
def findAccount(self):
username = self.ids["login_in"].text
password = self.ids["pass_in"].text
c.execute('''SELECT * FROM customer WHERE name = ? AND password = ?;
''', (username, password))
records = c.fetchone() #returns (1, Bob, qwerty, bob@gmail.com, 071234556)
return records
def verify(self):
try:
records = LoginPage.findAccount(self)
if self.ids["login_in"].text == records[1] and self.ids["pass_in"].text == records[2]:
self.manager.current = "user"
except TypeError:
print("Something is not correct")
class UserInfoPage(Screen):
def show_info(self):
pass
class ScreenManagement(ScreenManager):
pass
kv_file = Builder.load_file("login.kv")
class LoginApp(App):
def build(self):
return kv_file
*千伏
ScreenManager:
LoginPage:
UserInfoPage:
<LoginPage>:
orientation: "vertical"
name: "login"
BoxLayout:
TextInput:
id: login_in
TextInput:
id: pass_in
password: True
Button:
text: "GO"
on_release:
root.findAccount()
root.verify()
<UserInfoPage>:
name: "user"
BoxLayout:
Label:
id: the_id
text: 'id: '
Label:
text: 'name: '
Label:
text: 'email: '
Label:
text: 'phone number: '
通过使用“show\u info()”方法,我想在“UserInfoPage”屏幕上显示用户信息。为此,我需要来自变量'records'和'findAccount'帐户方法的信息。我试着这样做:
def show_info(self):
information = LoginPage.findAccount(self)
user_id = information[0]
self.ids["the_id"].text = self.ids["the_id"].text + str(user_id)
但它抛出一个错误,因为“findAccount()”方法链接到第一个屏幕。如何保存我在第一个屏幕上得到的信息并将其传输到第二个屏幕上? 谢谢你
首先,我们必须纠正某些错误:
没有必要在
.kv
中调用findAccount()
,因为verify()
在.py
中调用它LoginPage.findAccount(self)
语句不正确,必须使用self直接调用它,即正确的东西是self.findAccount()
避免使用try和,除非它是不必要的,在您的情况下,只需要验证
records
不是None
为了添加创建新方法不需要的信息,更好的方法是创建属性,并通过屏幕分配,为了获得合适的屏幕,我们使用
ScreenManager
的get_screen()
方法*.py
*.kv
相关问题 更多 >
编程相关推荐