首页 > 解决方案 > 当第一个脚本运行第二个脚本方法时,第二个脚本无法识别第一个脚本的变量

问题描述

我有这个脚本MainGUI.py,它从另一个脚本调用一个方法Main2.py。该MainGUI.py脚本与一个.kv名为 的文件链接gui.kv,其中调用了一个方法submitbutton()。这是一个定义的函数Main2.py,最终会遇到该行sm.current = "main",这是我在我的母文件MainGUI.py中定义的,其中 sm 是一个ScreenManager类,“main”是Screen我在gui.kv文件中定义的类的名称。当函数执行时,我希望 ScreenManagersm转到“主”屏幕。但不知何故,我收到以下错误:

NameError: name 'sm' is not defined

所以我假设我在文件之间链接变量时做错了,但我找不到什么。这是(相关的)代码:

主GUI.py

# importing functionality
from kivy.app import App
from kivy.lang import Builder

from kivy.uix.floatlayout import FloatLayout
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from Logini.Main.Main2 import LoginWindow
from Logini.Main.Main2 import RegisterWindow

# defining screenmanager and screens
class sm(ScreenManager):
    pass
class LoginWindow(LoginWindow):
    pass
class RegisterWindow(RegisterWindow):
    pass
class MainWindow(Screen):
    pass
class PreferencesWindow(Screen):
    pass

# linking .py with .kv
kv = Builder.load_file('gui.kv')

# creating application class that returns variable kv
class MyApp(App):
    def build(self):
        return (kv)

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

Main2.py

from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from GUI.MainGUI import sm

class LoginWindow(Screen):
    username = ObjectProperty(None)
    password = ObjectProperty(None)

    def submitbutton(self):
        username = self.username.text
        password = self.password.text
        with open("users.txt", 'r') as ff:
            for i in ff:
                usernamee, passwordd = i.split(';')
                print(usernamee, passwordd)
                print(username, password)
                if username == usernamee and password == passwordd.strip():
                    sm.current = "main"

gui.kv

sm:
    LoginWindow:
    MainWindow:
    PreferencesWindow:
    RegisterWindow:

<LoginWindow>:
    name: "login"
    username: username
    password: password

    FloatLayout:
        Button:
            pos_hint:{"x":0.3,"y":0.375}
            size_hint: 0.4, 0.1
            text: "Submit"
            font_size: 30
            on_release:
                root.manager.transition.direction = "down"
            root.submitbutton()
            background_normal: ''
            background_color: 1, .3, .4, .85

一些帮助会很棒!我已经尝试过使用导入sm,但这只会引入更多错误。Main2.pyfrom GUI.MainGUI import sm

编辑:我的文件夹结构如下,项目根文件夹:project/GUI/MainGUI.py、gui.kvproject/Logini/Main/Main2.py。调用类是有效的,所以我假设导入类没有错误。

标签: pythonclasskivypython-import

解决方案


尝试:

from project.GUI.MainGUI import sm

推荐阅读