结构优化

This commit is contained in:
冯佳
2025-07-31 17:02:08 +08:00
parent 627aa51235
commit 54bf9f6d94
5 changed files with 176 additions and 266 deletions

170
main.py
View File

@ -87,51 +87,31 @@ class app(MDApp):
wifi_status_text = StringProperty("")
def __init__(self):
super().__init__()
self.signup_branch = None
self.user_name = None
self.rec_grid = None
self.recommend_screen = None
self.book_input = None
self.data_tables = None
self.search_grid = None
self.search_field = None
self.renew_grid = None
self.renewable_books = []
self.renew = self.renewable_books
self.history_grid = None
self.books_history = []
self.history = self.books_history
self.image_label_grid = None
self.books = []
self.items = self.books
self.book_name = None
self.isbn = None
self.a = None
self.back_button = None
self.user = None
self.dialog = None
self.dialog2 = None
self.profile_edit_screen = None
self.edit_email = None
self.edit_prn = None
self.edit_name = None
self.edit_user_pass = None
self.edit_user_name = None
self.edit_wifi_ssid = None
self.edit_branch = None
self.profile_semester = None
self.profile_branch = None
self.profile_wifi_ssid = None
self.profile_prn = None
self.edit_modbus_ip = None
self.edit_modbus_port = None
self.edit_nfc_id = None
self.edit_reserve = None
self.profile_user_pass = None
self.profile_user_name = None
self.user_no = None
self.user_email = None
self.user_prn = None
self.d2 = None
self.d3 = None
self.d4 = None
self.profile_wifi_ssid = None
self.profile_modbus_ip = None
self.profile_modbus_port = None
self.profile_nfc_id = None
self.profile_reserve = None
self.user_pass = None
self.d1 = None
self.edit_semester = None
@ -217,44 +197,30 @@ class app(MDApp):
#############################################ALL INPUT TEXT############################################################
def on_start(self):
# 从根窗口中获取名为"login"的屏幕(登录界面)
login_screen = self.root.get_screen("login")
# 从根窗口中获取名为"home"的屏幕(主界面)
home_screen = self.root.get_screen("home")
# 通过界面ID获取主界面中的用户信息组件
self.user = home_screen.ids.user
# 从根窗口中获取名为"profile"的屏幕(个人资料界面)
profile_screen = self.root.get_screen("profile")
# 通过界面ID获取个人资料界面中的姓名展示组件
self.profile_user_name = profile_screen.ids.profile_user_name
# 通过界面ID获取个人资料界面中的邮箱展示组件
self.profile_user_pass = profile_screen.ids.profile_user_pass
# 通过界面ID获取个人资料界面中的PRN身份标识展示组件
self.profile_prn = profile_screen.ids.profile_prn
# 通过界面ID获取个人资料界面中的手机号展示组件
self.profile_wifi_ssid = profile_screen.ids.profile_wifi_ssid
# 通过界面ID获取个人资料界面中的所属部门/专业展示组件
self.profile_branch = profile_screen.ids.profile_branch
# 通过界面ID获取个人资料界面中的年级/学期展示组件
self.profile_semester = profile_screen.ids.profile_semester
# 从根窗口中获取名为"profile_edit"的屏幕(个人资料编辑界面)
self.profile_modbus_ip = profile_screen.ids.profile_modbus_ip
self.profile_modbus_port = profile_screen.ids.profile_modbus_port
self.profile_nfc_id = profile_screen.ids.profile_nfc_id
self.profile_reserve = profile_screen.ids.profile_reserve
self.profile_edit_screen = self.root.get_screen("profile_edit")
# 通过界面ID获取资料编辑界面中的姓名编辑输入框组件
self.edit_name = self.profile_edit_screen.ids.edit_name
# 通过界面ID获取资料编辑界面中的邮箱编辑输入框组件
self.edit_email = self.profile_edit_screen.ids.edit_email
# 通过界面ID获取资料编辑界面中的PRN身份标识编辑输入框组件
self.edit_prn = self.profile_edit_screen.ids.edit_prn
# 通过界面ID获取资料编辑界面中的手机号编辑输入框组件
self.edit_wifi_ssid = self.profile_edit_screen.ids.edit_no
# 通过界面ID获取资料编辑界面中的所属部门/专业编辑选择组件
self.edit_branch = self.profile_edit_screen.ids.edit_branch
# 通过界面ID获取资料编辑界面中的年级/学期编辑选择组件
self.edit_semester = self.profile_edit_screen.ids.edit_sem
self.edit_user_name = self.profile_edit_screen.ids.edit_user_name
self.edit_user_pass = self.profile_edit_screen.ids.edit_user_pass
self.edit_wifi_ssid = self.profile_edit_screen.ids.edit_wifi_ssid
self.edit_modbus_ip = self.profile_edit_screen.ids.edit_modbus_ip
self.edit_modbus_port = self.profile_edit_screen.ids.edit_modbus_port
self.edit_nfc_id = self.profile_edit_screen.ids.edit_nfc_id
self.edit_reserve = self.profile_edit_screen.ids.edit_reserve
self.root.bind(current=self.on_screen_changed)
@ -450,7 +416,7 @@ class app(MDApp):
def read_modbus_registers(self, slave_id=1, address=0, count=1):
"""
通用的Modbus保持寄存器读取函数(优化版)
通用的Modbus保持寄存器读取函数
:param slave_id: 从机ID
:param address: 寄存器地址
:param count: 读取数量
@ -482,10 +448,10 @@ class app(MDApp):
def write_modbus_register(self, slave_id=1, address=0, value=None):
"""
通用写入Modbus保持寄存器单个寄存器),低耦合版
通用写入Modbus保持寄存器(单个寄存器)
:param slave_id: 从机ID
:param address: 寄存器地址
:param value: 要写入的值整数0-65535
:param value: 要写入的值(整数,0-65535)
:return: {'success': bool, 'msg': str}
"""
return self.modbus_master.write_single_register(slave_id, address, value)
@ -640,22 +606,25 @@ class app(MDApp):
if wifi_id == csv_ssid:
# 通过列名获取用户信息
name = row['User']
prn = row['Reserve'] # 根据实际列名调整
email = row['Reserve'] # 根据实际列名调整
number = row['Reserve'] # 根据实际列名调整
password = row['User_pass']
branch = row['Reserve'] # 根据实际列名调整
semester = row['Reserve'] # 根据实际列名调整
wifi_ssid = row['Wifi_SSID']
modbus_ip = row['Modbus_IP']
modbus_port = row['Modbus_Port']
nfc_id = row['NFC_ID']
reserve = row['Reserve']
# 更新界面显示的用户信息
self.root.current = "home"
self.user.text = f"[b]Hey! {name}[/b]"
self.profile_user_name.text = self.edit_name.text = name
self.profile_user_pass.text = self.edit_email.text = email
self.profile_prn.text = self.edit_prn.text = prn
self.profile_wifi_ssid.text = row['Wifi_SSID']
self.profile_semester.text = self.edit_semester.text = semester
self.profile_branch.text = self.edit_branch.text = branch
self.profile_user_name.text = self.edit_user_name.text = name
self.profile_user_pass.text = self.edit_user_pass.text = password
self.profile_wifi_ssid.text = self.edit_wifi_ssid.text = wifi_ssid
self.profile_modbus_ip.text = self.edit_modbus_ip.text = modbus_ip
self.profile_modbus_port.text = self.edit_modbus_port.text = modbus_port
self.profile_nfc_id.text = self.edit_nfc_id.text = nfc_id
self.profile_reserve.text = self.edit_reserve.text = reserve
# 连接Modbus设备
self.connect_modbus()
@ -675,7 +644,7 @@ class app(MDApp):
master = None
try:
# 获取当前WiFi SSID(保持不变)
# 获取当前WiFi SSID
if platform == "android":
from jnius import autoclass
PythonActivity = autoclass('org.kivy.android.PythonActivity')
@ -687,7 +656,7 @@ class app(MDApp):
else:
current_wifi_id = "zhizhan-2"
# 读取CSV配置(保持不变)
# 读取CSV配置
with open("data/Users.csv", "r", encoding="utf-8") as file:
csv_reader = csv.DictReader(file)
for row in csv_reader:
@ -701,16 +670,16 @@ class app(MDApp):
Clock.schedule_once(lambda dt: self.dialog1("未找到匹配的Modbus配置"))
return
# 断开现有连接(保持不变)
# 断开现有连接
self.modbus_master.disconnect()
# 创建新连接并测试(保持不变)
# 创建新连接并测试
connect_result = self.modbus_master.connect(modbus_ip, modbus_port)
if not connect_result['success']:
Clock.schedule_once(lambda dt: self.dialog1(connect_result['msg']))
return
print(f"Modbus连接成功 (modbus-tk)\nIP: {modbus_ip}\n端口: {modbus_port}")
Clock.schedule_once(lambda dt: self.dialog1(f"Modbus连接成功\nIP: {modbus_ip}\n端口: {modbus_port}"))
print(f"Modbus连接成功\nIP: {modbus_ip}\n端口: {modbus_port}")
# Clock.schedule_once(lambda dt: self.dialog1(f"Modbus连接成功\nIP: {modbus_ip}\n端口: {modbus_port}"))
except FileNotFoundError as e:
# 修复:将异常信息转为字符串或通过默认参数传递
@ -722,7 +691,6 @@ class app(MDApp):
Clock.schedule_once(lambda dt, msg=err_msg: self.dialog1(msg))
self.modbus_master = None
except socket.error as e:
# 修复:提前格式化错误信息
err_msg = f"网络连接失败: {e}"
Clock.schedule_once(lambda dt, msg=err_msg: self.dialog1(msg))
self.modbus_master = None
@ -735,28 +703,32 @@ class app(MDApp):
threading.Thread(target=_connect_in_background, daemon=True).start()
def edit_profile(self):
if self.edit_name.text == "" or self.edit_prn.text == "" or self.edit_email.text == "" or self.edit_number.text == "":
if self.edit_user_name.text == "" or self.edit_user_pass.text == "" or self.edit_wifi_ssid.text == "" or self.edit_modbus_ip.text == "" or self.edit_modbus_port.text == "" or self.edit_nfc_id.text == "" or self.edit_reserve.text == "":
check = "Enter all required fields"
return self.dialog1(check)
else:
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
'User': self.edit_user_name.text,
'User_pass': self.edit_user_pass.text,
'Wifi_SSID': self.edit_wifi_ssid.text,
'Modbus_IP': self.edit_modbus_ip.text,
'Modbus_Port': self.edit_modbus_port.text,
'NFC_ID': self.edit_nfc_id.text,
'Reserve': self.edit_reserve.text
}
update_user_profile(user_data, self.profile_wifi_ssid.text)
self.verify(True)
self.root.current = "home"
def secure_profile(self):
self.profile_edit_screen.ids.edit_email.readonly = True
self.profile_edit_screen.ids.edit_prn.readonly = True
self.profile_edit_screen.ids.edit_no.readonly = True
self.profile_edit_screen.ids.edit_private_credential_butn.disabled = False
self.profile_edit_screen.ids.edit_user_pass.readonly = True
self.profile_edit_screen.ids.edit_wifi_ssid.readonly = True
self.profile_edit_screen.ids.edit_modbus_ip.readonly = True
self.profile_edit_screen.ids.edit_modbus_port.readonly = True
self.profile_edit_screen.ids.edit_nfc_id.readonly = True
self.profile_edit_screen.ids.edit_reserve.readonly = False
from user_data_manager import update_user_profile