分离edit_profile,降低耦合

This commit is contained in:
冯佳
2025-07-31 10:17:36 +08:00
parent ed4f610708
commit 627aa51235
5 changed files with 217 additions and 183 deletions

174
main.py
View File

@ -161,6 +161,36 @@ class app(MDApp):
self.theme_cls.font_styles["Caption"] = ["BPoppins", 13, False, 0.15]
self.theme_cls.font_styles["Overline"] = ["BPoppins", 10, True, 1.5]
def on_text_field_focus(self, instance, value):
if value:
# 当MDTextField获得焦点时
# 获取ScrollView和MDList的引用
scroll_view = self.root.get_screen('modify_current_param').ids.real_time_scroll_view
md_list = self.root.get_screen('modify_current_param').ids.real_time_md_list
# 计算MDTextField在MDList中的相对位置
# instance.y 是MDTextField在父控件BoxLayout中的y坐标
# instance.parent.y 是BoxLayout在MDList中的y坐标
# 所以MDTextField在MDList中的y坐标是 instance.y + instance.parent.y
text_field_y_in_mdlist = instance.y + instance.parent.y
# 计算需要滚动的目标位置
# 目标是让MDTextField的底部与ScrollView的底部对齐或者至少在可见区域内
# scroll_view.height 是ScrollView的可见高度
# md_list.height 是MDList的总高度
# scroll_view.scroll_y 的范围是0到10表示底部1表示顶部
# 计算MDTextField相对于MDList顶部的距离
relative_y = md_list.height - text_field_y_in_mdlist - instance.height
# 将相对距离转换为scroll_y的值
# 确保不会滚动到超出范围
if md_list.height > scroll_view.height:
target_scroll_y = relative_y / (md_list.height - scroll_view.height)
# 限制target_scroll_y在0到1之间
target_scroll_y = max(0, min(1, target_scroll_y))
scroll_view.scroll_y = target_scroll_y
def build(self):
Builder.load_file('kv/app.kv')
screen_manager = ScreenManager()
@ -704,143 +734,21 @@ class app(MDApp):
threading.Thread(target=_connect_in_background, daemon=True).start()
###############################################SIGNUP Page Functions#####################################################
# signup Verification function "check_signup"
# def check_signup(self, name, prn, email, num, password, branch, sem, Wifi_SSID, modbus_ip, modbus_port):
# if name == "" or prn == "" or email == "" or num == "" or password == "" or branch == "" or sem == "":
# check = "Enter all required fields"
# return self.dialog1(check)
# else:
# status = "None"
# with open('data/Users.csv', "r") as file:
# csv_reader = csv.reader(file, delimiter=',')
# for line in csv_reader:
# try:
# if line[3] == num:
# status = "num"
# break
# if line[1] == prn:
# status = "prn"
# break
# if line[2] == email:
# status = "email"
# break
# else:
# status = False
# except IndexError:
# pass
# if status == "num":
# check = "Number already registered Please enter a new number"
# return self.dialog1(check)
# elif status == "prn":
# check = "PRN already registered Please enter a PRN"
# return self.dialog1(check)
# elif status == "email":
# check = "Email already registered Please enter a new email"
# return self.dialog1(check)
# else:
# self.root.current = "otp"
# self.send_otp(num)
# # 保存注册信息时包含Modbus信息
# self.signup_modbus_ip = modbus_ip
# self.signup_modbus_port = modbus_port
# check = "One Time Password has been shared on your registered Whatsapp No. Successful!."
# self.dialog1(check)
##################################################FORGOT PassWord Page##################################################
# # FORGOT PASSWORD page mobile number verification function 'verify_no'
# def verify_no(self):
# status = False
# if self.mobile_no.text == "":
# check = "Please enter your Mobile Number."
# return self.dialog1(check)
# else:
# with open('data/Users.csv', "r", encoding="utf-8") as file:
# csv_reader = csv.reader(file, delimiter=",")
# for line in csv_reader:
# try:
# if line[3] == self.mobile_no.text:
# status = True
# break
# else:
# status = False
# except IndexError:
# pass
# except Exception as e:
# print(e)
# if status:
# check = "One Time Password has been shared on your registered Whatsapp No. Successful!."
# self.root.current = "otp"
# self.send_otp(self.mobile_no.text)
# return self.dialog1(check)
# else:
# check = "Enter Registered Mobile Number."
# self.dialog1(check)
# def reset_password(self):
# if self.new_pass.text == "" or self.new_pass1.text == "":
# check = "Please enter your new password"
# return self.dialog1(check)
# elif not self.new_pass.text == self.new_pass1.text:
# check = "Password Does Not Match. \nPlease Re-check your password."
# return self.dialog1(check)
# else:
# with open('data/Users.csv', "r", encoding="utf-8") as file:
# csv_reader = csv.DictReader(file, delimiter=",")
# rows = [row for row in csv_reader]
# for row in rows:
# if row['Reserve'] == self.mobile_no.text:
# row['User_pass'] = self.new_pass.text
# break
# try:
# with open('data/Users.csv', "w", newline='', encoding="utf-8") as file:
# headers = ["User", "Reserve", "Student_Email", "Reserve", "User_pass",
# "Branch", "Semester"]
# csv_writer = csv.DictWriter(file, fieldnames=headers)
# csv_writer.writeheader()
# csv_writer.writerows(rows)
# check = "Password Updated Successfully!"
# self.root.current = "login"
# except Exception as e:
# print(e)
# check = "Something went wrong please try again."
# self.dialog1(check)
###############################################PROFILE & EDIT Profile Page##############################################
def edit_profile(self):
if self.edit_name.text == "" or self.edit_prn.text == "" or self.edit_email.text == "" or self.edit_number.text == "":
check = "Enter all required fields"
return self.dialog1(check)
else:
with open('data/Users.csv', "r", encoding="utf-8") as file:
csv_reader = csv.DictReader(file, delimiter=",")
rows = [row for row in csv_reader]
for row in rows:
if row['Wifi_SSID'] == self.profile_wifi_ssid.text:
row['User'] = self.edit_name.text
row['User_pass'] = self.edit_prn.text
row['Wifi_SSID'] = self.edit_email.text
row['Modbus_IP'] = self.edit_number.text
row['Modbus_Port'] = self.password.text
row['Reserve'] = self.edit_branch.text
row['Reserve'] = self.edit_semester.text
break
with open('data/Users.csv', newline="", mode="w", encoding="utf-8") as file:
header = ["User", "User_pass", "Wifi_SSID", "Modbus_IP", "Modbus_Port",
"Reserve", "Reserve"]
csv_writer = csv.DictWriter(file, fieldnames=header)
csv_writer.writeheader()
csv_writer.writerows(rows)
user_data = {
'User': self.edit_name.text,
'User_pass': self.edit_prn.text,
'Wifi_SSID': self.edit_email.text,
'Modbus_IP': self.edit_number.text,
'Modbus_Port': self.password.text,
'Reserve_branch': self.edit_branch.text,
'Reserve_semester': self.edit_semester.text
}
update_user_profile(user_data, self.profile_wifi_ssid.text)
self.verify(True)
self.root.current = "home"
@ -850,6 +758,8 @@ class app(MDApp):
self.profile_edit_screen.ids.edit_no.readonly = True
self.profile_edit_screen.ids.edit_private_credential_butn.disabled = False
from user_data_manager import update_user_profile
if __name__ == '__main__':
app().run()