![](/img/trans.png)
[英]why doesn't my screen manager won't work with kivy language alone and needs python?
[英]Why my python kivy login form doesn't work?
我使用 PostgreSQL 创建了一个 Kivy 登录表单。
def login(self):
# get email and password from TextInputs
email = self.root.ids['login_screen'].ids['email']
password = self.root.ids['login_screen'].ids['password'].text
con = psycopg2.connect(
host="localhost",
database="abc",
user="postgres",
password="123")
cur = con.cursor()
#get password from db
sql = "SELECT password FROM regdata WHERE email=%s"
val = [email.text]
cur.execute(sql, val)
rows = cur.fetchall()
for row in rows:
#tpassword is variable which helps to check password(if password = password we can sign in)
tpassword = row[0]
print(password)
print(tpassword)
if password == tpassword:
self.change_screen('home_screen')
con.commit()
cur.close()
con.close()
所以,当我打印变量密码和密码时,它们的值是相等的,但我不能改变屏幕。
感谢帮助!
这样做ScreenManager
和Screen
效率更高。
主文件
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
import pyttsx3
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.properties import ObjectProperty, NumericProperty
Window.size = (800, 600) #setting screen size to 800x600
asset = Builder.load_file('styles.kv') #loading styles of widgets from 'styles.kv'
class ScreenOne(Screen): #making a screen
pass
class Main(Screen): #making another screen
pass
class Manager(ScreenManager): #making a manager to handler screens
screen_one = ObjectProperty(None)
class MainApp(App): #making the main app
def build(self):
m = Manager(transition=NoTransition()) #setting the manager to manage screens for this app
return m
def login(self): #check function to check email and password
email = self.root.ids.screen_one.ids['email']
password = self.root.ids.screen_one.ids['password'].text
con = psycopg2.connect(
host="localhost",
database="abc",
user="postgres",
password="123")
cur = con.cursor()
#get password from db
sql = "SELECT password FROM regdata WHERE email=%s"
val = [email.text]
cur.execute(sql, val)
rows = cur.fetchall()
for row in rows:
#tpassword is variable which helps to check password(if password = password we can sign in)
tpassword = row[0]
print(password)
print(tpassword)
if password == tpassword:
self.root.current = 'screen1'
con.commit()
cur.close()
con.close()
MainApp().run() #running the app
styles.kv
<Main>:
FloatLayout:
anchor_x: 'center'
anchor_y: 'top'
TextInput:
id: email
size_hint: (None, None)
height: 60
width: 250
pos: 270, 400
hint_text: 'Type your e-mail here'
TextInput:
id: password
password: True
size_hint: (None, None)
height: 60
width: 250
pos: 270, 320
hint_text: 'Type your password here'
Button:
id: submit
size_hint: (None, None)
size: 125, 50
text: 'Submit'
pos: 335, 250
on_press: app.login()
<ScreenOne>:
FloatLayout:
anchor_x: 'center'
anchor_y: 'top'
TextInput:
id: input
size_hint: (None, None)
hint_text: 'This is your home screen'
height: 300
width: 400
pos: 200, 200
<Manager>:
id: screen_manager
screen_one: screen_one
Main:
id: screen_one
name: "main"
manager: screen_manager
ScreenOne:
id: screen_two
name: "screen1"
manager: screen_manager
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.