Python Kivy开发如何将登录页密码传递到另一文件的类中
实现方法
你当前的写法存在两个可优化点:一是不要拆分两个独立的MDApp实例交替启动,二是不要在业务逻辑中动态导入模块。按以下步骤修改即可完成密码传递:
步骤1:修改graphical_password.py代码
移除文件末尾的自动启动逻辑,给App类增加初始化参数接收登录密码:
from kivymd.app import MDApp from kivy.uix.screenmanager import Screen from kivymd.uix.datatables import MDDataTable from kivy.metrics import dp class PasswordManagerApp(MDApp): # 新增初始化方法接收登录密码 def __init__(self, login_password, **kwargs): super().__init__(**kwargs) # 将密码存入实例属性,当前App的所有方法都可以直接调用 self.login_password = login_password def build(self): # 后续解密逻辑直接使用self.login_password即可 screen = Screen() table = MDDataTable( pos_hint = {'center_x': 0.5, 'center_y': 0.5}, size_hint = (0.9, 0.6), check = True, column_data =[ ("F_name", dp(30)), ("Name", dp(30)), ("Mail", dp(30)), ("Phone", dp(30)), ], row_data = [ ("P1","P2","GAMIL","0658"), ("P3","P4","GAMIL","0658"), ] ) self.theme_cls.theme_style = "Light" self.theme_cls.primary_palette = "BlueGray" screen.add_widget(table) return screen # 删掉原来文件末尾的 MainApp().run() 启动逻辑
步骤2:修改登录页代码
提前导入密码管理页的App类,验证通过后直接实例化传参启动:
from kivymd.app import MDApp from kivy.lang import Builder # 提前导入密码管理页的App类 from graphical_password import PasswordManagerApp class LoginApp(MDApp): def build(self): self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "BlueGray" return Builder.load_file('libs\kv\login_page.kv') def logger(self): try : # 拿到用户输入的原始密码 input_password = self.root.ids.password.text verify_result = verif_password(input_password) if verify_result: # 停掉登录页App self.stop() # 实例化密码管理App,传入登录密码后启动 PasswordManagerApp(login_password=input_password).run() else : print("密码错误") except Exception as e: print(f"验证出错: {str(e)}") if __name__ == "__main__": LoginApp().run()
可选的轻量实现
如果不想调整现有App结构,也可以用模块全局变量传递参数:
- 在
graphical_password.py顶部定义全局变量LOGIN_PASSWORD = "" - 登录验证通过后,先赋值
graphical_password.LOGIN_PASSWORD = input_password,再导入启动密码管理页即可,使用时直接调用这个全局变量就行。
内容的提问来源于stack exchange,提问作者Bapth
相关产品推荐
相关产品推荐

