将变量传递给正在导入的文件?

时间:2017-06-04 15:37:39

标签: python python-3.x variables python-import

我有3个python文件:loginteacher_uistudent_ui。所有这三个都使用tkinter。登录文件将名称作为输入,如果名称是数据库中的有效表,则登录文件会导入student_ui文件以运行它。

我遇到的问题是student_ui文件需要一个名为name的变量,它是login中的输入。我正在努力将变量导入student_ui,因为它一直在变化。

login中加载student_ui文件的代码是:

elif name_data in names_list:
    opening_window.destroy()
    import student_ui

然后运行student_ui,它提供不同的接口。 name_data的代码为:name_data = name.get().lower()

student_ui中需要name_data的代码行是:user_table_name = name_data。此行抛出NameError因为name未定义。

因此,当student_ui加载name_data时,如何loginlogin获取student_ui

student_ui的部分代码是:

number_words = {
                        "Forty Five" : 45,
                        ...
                        "Nine Thousand, Eight Hundred and Sixty Four" : 9864
}

user_table_name = name_data

query = 'SELECT _45 FROM {} ORDER BY runid DESC LIMIT 
3'.format(user_table_name)
c.execute(query)
status_1 = c.fetchall()
if ('true',) in status_1:
    status_1 = True
else:
    status_1 = False

还有标签,输入,标记和大量数据库书写和阅读的代码。

1 个答案:

答案 0 :(得分:1)

IsaacDj's comment:我会使用类。

首先,我将所有student_ui.py的代码封装到类中以防止意外的代码执行:

# student_ui.py

class StudentUI:
    def __init__(self, name):
        self.name = name

    def do_things(self):
        number_words = {
            "Forty Five" : 45,
            ...
            "Nine Thousand, Eight Hundred and Sixty Four" : 9864
        }

        query = 'SELECT _45 FROM {} ORDER BY runid DESC LIMIT 3'.format(self.name)

        c.execute(query)
        status_1 = c.fetchall()

        if ('true',) in status_1:
            status_1 = True
        else:
            status_1 = False

然后,为了简化工作,您可以直接导入student-ui-不必有条件地导入模块:

# login.py

from student_ui import StudentUI

def do_stuff(name_data):
    if name_data in names_list:
        opening_window.destroy()
        student_ui = StudentUI(name_data)
        student_ui.do_stuff()

if __name__ == "__main__":
    do_stuff()

您还可以使用if __name__ == "__main__":来阻止student_ui在导入时执行。