You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:48:00