gpt4 book ai didi

python - Kivy - 根据 If 语句的结果显示/隐藏矩形

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:33 26 4
gpt4 key购买 nike

我有一个“电子邮件”文本框,它接收用户输入,然后评估它是否是有效的电子邮件。如果电子邮件无效,我想在文本框周围显示一个红色矩形,如果相反,则隐藏它。我已经绘制了矩形,现在只需切换其可见性即可。

user.py

"""User-end software for signup/account data."""
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
import re


class LoginScreen(Widget):
"""Class for signup screen contents."""

email = StringProperty()
password = StringProperty()

def login(self):
"""Actions for when Login button is pressed."""
if not re.fullmatch(r"[^@]+@[^@]+\.[^@]+", self.email): # Check if email is valid
print("Invalid email!") # Hide rectangle instead of this


class UserApp(App):
"""Main app."""

def build(self):
"""Build app."""
return LoginScreen()


if __name__ == '__main__':
UserApp().run()

user.kv

#:kivy 1.11.1

<LoginScreen>:
email: email_input.text
password: password_input.text
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle: # show/hide this object
size: root.width * 5 / 7 + 6, 46
pos: root.width * 1 / 7 - 3, root.top - 259
Label:
font_size: 20
center_x: root.width / 2
top: root.top + 20
text: "Offbox Insurance"
Label:
font_size: 64
center_x: root.width / 2
top: root.top - 30
text: "Log in"
Label:
font_size: 20
center_x: root.width / 2
top: root.top - 140
text: "Email"
TextInput:
id: email_input
font_size: 24
height: 40
width: root.width * 5 / 7
center_x: root.width / 2
top: root.top - 216
multiline: False
Label:
font_size: 20
center_x: root.width / 2
top: root.top - 240
text: "Password"
TextInput:
id: password_input
font_size: 24
height: 40
width: root.width * 5 / 7
center_x: root.width / 2
top: root.top - 316
multiline: False
password: True
Button:
font_size: 20
height: 50
center_x: root.width / 2
top: root.top - 380
text: "Log in"
on_press: root.login()
Label:
font_size: 16
center_x: root.width / 2
top: root.height / 12 + 75
text: "Don't have an account?"
Button:
font_size: 16
height: 36
center_x: root.width / 2
top: root.height / 12 + 5
text: "Sign up"

最佳答案

好的。所以。这是他们的方式,我会这样做,这里是一个工作示例。当你加载它时,我会保持矩形黑色,如果无效则让它变成红色。所以我把 Canvas 放在一个小部件中,这样我就可以为它分配一个 id,并将 valid_color 设置为黑色代码,然后将 rgba 设置为 valid(color)。在登录函数内部,如果有效颜色无效,我更改了它的值,如果它有效,则将其保留为黑色,如果以前无效,则将其更改回黑色。这是代码:

用户.py:

"""User-end software for signup/account data."""
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
import re


class LoginScreen(Widget):
"""Class for signup screen contents."""

email = StringProperty()
password = StringProperty()

def login(self):
"""Actions for when Login button is pressed."""
if not re.fullmatch(r"[^@]+@[^@]+\.[^@]+", self.email): # Check if email is valid
print("Invalid email!") # Hide rectangle instead of this
self.ids.valid_login.valid_color = (1, 0, 0, 1)
else:
print('Valid Email!')
self.ids.valid_login.valid_color = (0, 0, 0, 0)



class UserApp(App):
"""Main app."""

def build(self):
"""Build app."""
return LoginScreen()


if __name__ == '__main__':
UserApp().run()

用户.kv

#:kivy 1.11.1

<LoginScreen>:
email: email_input.text
password: password_input.text
Widget:
id: valid_login
valid_color:(0, 0, 0, 0)
canvas:
Color:
rgba: self.valid_color
Rectangle:
size: root.width * 5 / 7 + 6, 46
pos: root.width * 1 / 7 - 3, root.top - 259
Label:
font_size: 20
center_x: root.width / 2
top: root.top + 20
text: "Offbox Insurance"
Label:
font_size: 64
center_x: root.width / 2
top: root.top - 30
text: "Log in"
Label:
font_size: 20
center_x: root.width / 2
top: root.top - 140
text: "Email"
TextInput:
id: email_input
font_size: 24
height: 40
width: root.width * 5 / 7
center_x: root.width / 2
top: root.top - 216
multiline: False
Label:
font_size: 20
center_x: root.width / 2
top: root.top - 240
text: "Password"
TextInput:
id: password_input
font_size: 24
height: 40
width: root.width * 5 / 7
center_x: root.width / 2
top: root.top - 316
multiline: False
password: True
Button:
font_size: 20
height: 50
center_x: root.width / 2
top: root.top - 380
text: "Log in"
on_press:
root.login()
Label:
font_size: 16
center_x: root.width / 2
top: root.height / 12 + 75
text: "Don't have an account?"
Button:
font_size: 16
height: 36
center_x: root.width / 2
top: root.height / 12 + 5
text: "Sign up"

我还建议,如果您计划制作多个页面,请继续实现屏幕管理器,但我提供的解决了验证问题。希望这对您有所帮助!

关于python - Kivy - 根据 If 语句的结果显示/隐藏矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com