我有3个python文件:login
,teacher_ui
和student_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
时,如何login
从login
获取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
还有标签,输入,标记和大量数据库书写和阅读的代码。
答案 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
在导入时执行。