@ -0,0 +1 @@
|
||||
Subproject commit d74fecb6996af48dc7c536cfe9f66c195de04bdf
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,409 @@
|
||||
('C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\build\\中小学数学学习软件\\PYZ-00.pyz',
|
||||
[('__future__',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\__future__.py',
|
||||
'PYMODULE'),
|
||||
('_colorize',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_colorize.py',
|
||||
'PYMODULE'),
|
||||
('_compat_pickle',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_compat_pickle.py',
|
||||
'PYMODULE'),
|
||||
('_compression',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_compression.py',
|
||||
'PYMODULE'),
|
||||
('_opcode_metadata',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_opcode_metadata.py',
|
||||
'PYMODULE'),
|
||||
('_py_abc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_py_abc.py',
|
||||
'PYMODULE'),
|
||||
('_pydatetime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_pydatetime.py',
|
||||
'PYMODULE'),
|
||||
('_pydecimal',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_pydecimal.py',
|
||||
'PYMODULE'),
|
||||
('_strptime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_strptime.py',
|
||||
'PYMODULE'),
|
||||
('_threading_local',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\_threading_local.py',
|
||||
'PYMODULE'),
|
||||
('argparse',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\argparse.py',
|
||||
'PYMODULE'),
|
||||
('ast',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ast.py',
|
||||
'PYMODULE'),
|
||||
('base64',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\base64.py',
|
||||
'PYMODULE'),
|
||||
('bisect',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\bisect.py',
|
||||
'PYMODULE'),
|
||||
('bz2',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\bz2.py',
|
||||
'PYMODULE'),
|
||||
('calendar',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\calendar.py',
|
||||
'PYMODULE'),
|
||||
('config',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\config.py',
|
||||
'PYMODULE'),
|
||||
('contextlib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\contextlib.py',
|
||||
'PYMODULE'),
|
||||
('contextvars',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\contextvars.py',
|
||||
'PYMODULE'),
|
||||
('controller',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\controller\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('controller.app_controller',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\controller\\app_controller.py',
|
||||
'PYMODULE'),
|
||||
('copy',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\copy.py',
|
||||
'PYMODULE'),
|
||||
('csv',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\csv.py',
|
||||
'PYMODULE'),
|
||||
('dataclasses',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\dataclasses.py',
|
||||
'PYMODULE'),
|
||||
('datetime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\datetime.py',
|
||||
'PYMODULE'),
|
||||
('decimal',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\decimal.py',
|
||||
'PYMODULE'),
|
||||
('dis',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\dis.py',
|
||||
'PYMODULE'),
|
||||
('email',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('email._encoded_words',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_encoded_words.py',
|
||||
'PYMODULE'),
|
||||
('email._header_value_parser',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_header_value_parser.py',
|
||||
'PYMODULE'),
|
||||
('email._parseaddr',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_parseaddr.py',
|
||||
'PYMODULE'),
|
||||
('email._policybase',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\_policybase.py',
|
||||
'PYMODULE'),
|
||||
('email.base64mime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\base64mime.py',
|
||||
'PYMODULE'),
|
||||
('email.charset',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\charset.py',
|
||||
'PYMODULE'),
|
||||
('email.contentmanager',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\contentmanager.py',
|
||||
'PYMODULE'),
|
||||
('email.encoders',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\encoders.py',
|
||||
'PYMODULE'),
|
||||
('email.errors',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\errors.py',
|
||||
'PYMODULE'),
|
||||
('email.feedparser',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\feedparser.py',
|
||||
'PYMODULE'),
|
||||
('email.generator',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\generator.py',
|
||||
'PYMODULE'),
|
||||
('email.header',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\header.py',
|
||||
'PYMODULE'),
|
||||
('email.headerregistry',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\headerregistry.py',
|
||||
'PYMODULE'),
|
||||
('email.iterators',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\iterators.py',
|
||||
'PYMODULE'),
|
||||
('email.message',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\message.py',
|
||||
'PYMODULE'),
|
||||
('email.mime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\mime\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('email.mime.base',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\mime\\base.py',
|
||||
'PYMODULE'),
|
||||
('email.mime.nonmultipart',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\mime\\nonmultipart.py',
|
||||
'PYMODULE'),
|
||||
('email.mime.text',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\mime\\text.py',
|
||||
'PYMODULE'),
|
||||
('email.parser',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\parser.py',
|
||||
'PYMODULE'),
|
||||
('email.policy',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\policy.py',
|
||||
'PYMODULE'),
|
||||
('email.quoprimime',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\quoprimime.py',
|
||||
'PYMODULE'),
|
||||
('email.utils',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\email\\utils.py',
|
||||
'PYMODULE'),
|
||||
('fnmatch',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\fnmatch.py',
|
||||
'PYMODULE'),
|
||||
('fractions',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\fractions.py',
|
||||
'PYMODULE'),
|
||||
('getopt',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\getopt.py',
|
||||
'PYMODULE'),
|
||||
('gettext',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\gettext.py',
|
||||
'PYMODULE'),
|
||||
('glob',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\glob.py',
|
||||
'PYMODULE'),
|
||||
('gzip',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\gzip.py',
|
||||
'PYMODULE'),
|
||||
('hashlib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\hashlib.py',
|
||||
'PYMODULE'),
|
||||
('hmac',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\hmac.py',
|
||||
'PYMODULE'),
|
||||
('importlib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib._abc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib._bootstrap',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_bootstrap.py',
|
||||
'PYMODULE'),
|
||||
('importlib._bootstrap_external',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\_bootstrap_external.py',
|
||||
'PYMODULE'),
|
||||
('importlib.abc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib.machinery',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\machinery.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._adapters',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_adapters.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._collections',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_collections.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._functools',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_functools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._itertools',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_itertools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._meta',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_meta.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._text',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\metadata\\_text.py',
|
||||
'PYMODULE'),
|
||||
('importlib.readers',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\readers.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._adapters',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_adapters.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._common',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_common.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._functional',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_functional.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._itertools',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\_itertools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources.abc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources.readers',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\resources\\readers.py',
|
||||
'PYMODULE'),
|
||||
('importlib.util',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\importlib\\util.py',
|
||||
'PYMODULE'),
|
||||
('inspect',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\inspect.py',
|
||||
'PYMODULE'),
|
||||
('ipaddress',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ipaddress.py',
|
||||
'PYMODULE'),
|
||||
('json',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('json.decoder',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\decoder.py',
|
||||
'PYMODULE'),
|
||||
('json.encoder',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\encoder.py',
|
||||
'PYMODULE'),
|
||||
('json.scanner',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\json\\scanner.py',
|
||||
'PYMODULE'),
|
||||
('logging',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\logging\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('lzma',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\lzma.py',
|
||||
'PYMODULE'),
|
||||
('model',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\model\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('model.auth_service',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\model\\auth_service.py',
|
||||
'PYMODULE'),
|
||||
('model.question_generators',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\model\\question_generators.py',
|
||||
'PYMODULE'),
|
||||
('numbers',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\numbers.py',
|
||||
'PYMODULE'),
|
||||
('opcode',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\opcode.py',
|
||||
'PYMODULE'),
|
||||
('pathlib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('pathlib._abc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\_abc.py',
|
||||
'PYMODULE'),
|
||||
('pathlib._local',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pathlib\\_local.py',
|
||||
'PYMODULE'),
|
||||
('pickle',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pickle.py',
|
||||
'PYMODULE'),
|
||||
('pprint',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\pprint.py',
|
||||
'PYMODULE'),
|
||||
('py_compile',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\py_compile.py',
|
||||
'PYMODULE'),
|
||||
('quopri',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\quopri.py',
|
||||
'PYMODULE'),
|
||||
('random',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\random.py',
|
||||
'PYMODULE'),
|
||||
('selectors',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\selectors.py',
|
||||
'PYMODULE'),
|
||||
('shutil',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\shutil.py',
|
||||
'PYMODULE'),
|
||||
('signal',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\signal.py',
|
||||
'PYMODULE'),
|
||||
('smtplib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\smtplib.py',
|
||||
'PYMODULE'),
|
||||
('socket',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\socket.py',
|
||||
'PYMODULE'),
|
||||
('ssl',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\ssl.py',
|
||||
'PYMODULE'),
|
||||
('statistics',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\statistics.py',
|
||||
'PYMODULE'),
|
||||
('string',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\string.py',
|
||||
'PYMODULE'),
|
||||
('stringprep',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\stringprep.py',
|
||||
'PYMODULE'),
|
||||
('subprocess',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\subprocess.py',
|
||||
'PYMODULE'),
|
||||
('tarfile',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tarfile.py',
|
||||
'PYMODULE'),
|
||||
('tempfile',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tempfile.py',
|
||||
'PYMODULE'),
|
||||
('textwrap',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\textwrap.py',
|
||||
'PYMODULE'),
|
||||
('threading',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\threading.py',
|
||||
'PYMODULE'),
|
||||
('tkinter',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tkinter\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.commondialog',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tkinter\\commondialog.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.constants',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tkinter\\constants.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.messagebox',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tkinter\\messagebox.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.ttk',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tkinter\\ttk.py',
|
||||
'PYMODULE'),
|
||||
('token',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\token.py',
|
||||
'PYMODULE'),
|
||||
('tokenize',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tokenize.py',
|
||||
'PYMODULE'),
|
||||
('tracemalloc',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\tracemalloc.py',
|
||||
'PYMODULE'),
|
||||
('typing',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\typing.py',
|
||||
'PYMODULE'),
|
||||
('urllib',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('urllib.parse',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\urllib\\parse.py',
|
||||
'PYMODULE'),
|
||||
('view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('view.login_view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\login_view.py',
|
||||
'PYMODULE'),
|
||||
('view.main_view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\main_view.py',
|
||||
'PYMODULE'),
|
||||
('view.password_view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\password_view.py',
|
||||
'PYMODULE'),
|
||||
('view.quiz_view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\quiz_view.py',
|
||||
'PYMODULE'),
|
||||
('view.register_view',
|
||||
'C:\\Users\\哈俊元\\Desktop\\2班_袁明霜涛_哈俊元_结对项目\\src\\view\\register_view.py',
|
||||
'PYMODULE'),
|
||||
('zipfile',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('zipfile._path',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\_path\\__init__.py',
|
||||
'PYMODULE'),
|
||||
('zipfile._path.glob',
|
||||
'C:\\Users\\哈俊元\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\zipfile\\_path\\glob.py',
|
||||
'PYMODULE')])
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
|
||||
This file lists modules PyInstaller was not able to find. This does not
|
||||
necessarily mean this module is required for running your program. Python and
|
||||
Python 3rd-party packages include a lot of conditional or optional modules. For
|
||||
example the module 'ntpath' only exists on Windows, whereas the module
|
||||
'posixpath' only exists on Posix systems.
|
||||
|
||||
Types if import:
|
||||
* top-level: imported at the top-level - look at these first
|
||||
* conditional: imported within an if-statement
|
||||
* delayed: imported within a function
|
||||
* optional: imported within a try-except-statement
|
||||
|
||||
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||
tracking down the missing module yourself. Thanks!
|
||||
|
||||
missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional)
|
||||
missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib._local (optional), subprocess (delayed, conditional, optional)
|
||||
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
|
||||
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional)
|
||||
missing module named 'collections.abc' - imported by traceback (top-level), typing (top-level), inspect (top-level), logging (top-level), importlib.resources.readers (top-level), selectors (top-level), tracemalloc (top-level)
|
||||
missing module named posix - imported by posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional), os (conditional, optional)
|
||||
missing module named resource - imported by posix (top-level)
|
||||
missing module named _posixsubprocess - imported by subprocess (conditional)
|
||||
missing module named fcntl - imported by subprocess (optional)
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,8 @@
|
||||
{
|
||||
"3154420541@qq.com": {
|
||||
"username": "哈俊元",
|
||||
"password": "LZLhjy123",
|
||||
"level": "primary",
|
||||
"register_time": "2025-10-11 14:06:12"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,6 @@
|
||||
"""配置文件"""
|
||||
class Config:
|
||||
EMAIL_ADDRESS = "3312923370@qq.com" # 发送验证码的邮箱(无需修改)
|
||||
EMAIL_AUTH_CODE = "iuyrclkpsfzpdahc" # 最新邮箱授权码(已更新)
|
||||
USER_DATA_FILE = "users.json" # 用户数据保存文件
|
||||
DIFFICULTY_LEVELS = ['primary', 'junior', 'senior'] # 难度等级
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,6 @@
|
||||
"""程序入口"""
|
||||
from controller.app_controller import AppController
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = AppController()
|
||||
app.run()
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,51 @@
|
||||
"""登录视图"""
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
|
||||
class LoginView:
|
||||
def __init__(self, root, controller):
|
||||
self.root = root
|
||||
self.controller = controller
|
||||
self.frame = None
|
||||
self.setup_ui()
|
||||
|
||||
def setup_ui(self):
|
||||
"""显示登录界面"""
|
||||
self.clear_window()
|
||||
self.frame = ttk.Frame(self.root, padding="20")
|
||||
self.frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
# 邮箱输入
|
||||
ttk.Label(self.frame, text="邮箱:").grid(row=0, column=0, sticky=tk.W, pady=5)
|
||||
self.email_entry = ttk.Entry(self.frame, width=30)
|
||||
self.email_entry.grid(row=0, column=1, pady=5)
|
||||
# 密码输入
|
||||
ttk.Label(self.frame, text="密码:").grid(row=1, column=0, sticky=tk.W, pady=5)
|
||||
self.password_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.password_entry.grid(row=1, column=1, pady=5)
|
||||
# 显示密码按钮
|
||||
self.show_pwd_btn = ttk.Button(self.frame, text="👁️", command=self.toggle_pwd_visibility)
|
||||
self.show_pwd_btn.grid(row=1, column=2, pady=5, padx=5)
|
||||
# 登录按钮
|
||||
ttk.Button(self.frame, text="登录", command=self.login).grid(row=2, column=0, columnspan=2, pady=10)
|
||||
# 注册按钮
|
||||
ttk.Button(self.frame, text="注册", command=self.controller.show_register_view).grid(row=3, column=0, columnspan=2, pady=5)
|
||||
# 退出按钮
|
||||
ttk.Button(self.frame, text="退出", command=self.root.quit).grid(row=4, column=0, columnspan=2, pady=5)
|
||||
|
||||
def toggle_pwd_visibility(self):
|
||||
"""切换密码输入框的可见性"""
|
||||
if self.password_entry.cget('show') == '*':
|
||||
self.password_entry.config(show='')
|
||||
else:
|
||||
self.password_entry.config(show='*')
|
||||
|
||||
def login(self):
|
||||
"""处理登录逻辑"""
|
||||
email = self.email_entry.get().strip()
|
||||
password = self.password_entry.get().strip()
|
||||
self.controller.handle_login(email, password)
|
||||
|
||||
def clear_window(self):
|
||||
"""清空窗口所有组件"""
|
||||
for widget in self.root.winfo_children():
|
||||
widget.destroy()
|
||||
@ -0,0 +1,250 @@
|
||||
"""密码修改视图"""
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
|
||||
class PasswordView:
|
||||
def __init__(self, root, controller):
|
||||
self.root = root
|
||||
self.controller = controller
|
||||
self.frame = None
|
||||
|
||||
def show_change_pwd_option_frame(self):
|
||||
"""显示修改密码方式选择界面"""
|
||||
self.clear_window()
|
||||
self.frame = ttk.Frame(self.root, padding="20")
|
||||
self.frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
|
||||
# 显示用户名和邮箱
|
||||
ttk.Label(self.frame, text=f"当前用户: {self.controller.current_username}", font=('微软雅黑', 12)).grid(row=0, column=0, columnspan=2, pady=10)
|
||||
ttk.Label(self.frame, text=f"邮箱: {self.controller.current_email}", font=('微软雅黑', 10)).grid(row=1, column=0, columnspan=2, pady=5)
|
||||
|
||||
# 修改密码方式选择
|
||||
ttk.Label(self.frame, text="选择修改密码方式:", font=('微软雅黑', 10)).grid(row=2, column=0, columnspan=2, pady=10)
|
||||
|
||||
# 通过原密码修改按钮
|
||||
ttk.Button(self.frame, text="通过原密码修改", command=self.controller.show_standard_change_frame,
|
||||
width=20).grid(row=3, column=0, columnspan=2, pady=5)
|
||||
|
||||
# 通过验证码修改按钮
|
||||
ttk.Button(self.frame, text="通过验证码修改(忘记密码)", command=self.controller.show_code_change_frame,
|
||||
width=20).grid(row=4, column=0, columnspan=2, pady=5)
|
||||
|
||||
# 返回主界面按钮
|
||||
ttk.Button(self.frame, text="返回主界面", command=self.controller.show_main_view).grid(row=5, column=0, columnspan=2, pady=10)
|
||||
|
||||
def show_standard_change_frame(self):
|
||||
"""显示通过原密码修改密码界面"""
|
||||
self.clear_window()
|
||||
self.frame = ttk.Frame(self.root, padding="20")
|
||||
self.frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
|
||||
# 标题
|
||||
ttk.Label(self.frame, text="通过原密码修改密码", font=('微软雅黑', 12, 'bold')).grid(row=0, column=0, columnspan=2, pady=10)
|
||||
|
||||
# 原密码输入
|
||||
ttk.Label(self.frame, text="原密码:").grid(row=1, column=0, sticky=tk.W, pady=5)
|
||||
self.old_pwd_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.old_pwd_entry.grid(row=1, column=1, pady=5)
|
||||
|
||||
# 新密码输入(含实时验证)
|
||||
ttk.Label(self.frame, text="新密码:").grid(row=2, column=0, sticky=tk.W, pady=5)
|
||||
self.new_pwd_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.new_pwd_entry.grid(row=2, column=1, pady=5)
|
||||
# 新密码提示标签
|
||||
self.new_pwd_hint_label = ttk.Label(self.frame, text="", foreground="red")
|
||||
self.new_pwd_hint_label.grid(row=2, column=2, sticky=tk.W, pady=5, padx=5)
|
||||
# 显示新密码按钮
|
||||
ttk.Button(self.frame, text="👁️", command=lambda: self.toggle_pwd_visibility(self.new_pwd_entry)).grid(row=2, column=3, pady=5, padx=5)
|
||||
# 绑定新密码输入事件(实时验证)
|
||||
self.new_pwd_entry.bind('<KeyRelease>', self.validate_new_password)
|
||||
|
||||
# 确认新密码输入(含实时验证)
|
||||
ttk.Label(self.frame, text="确认新密码:").grid(row=3, column=0, sticky=tk.W, pady=5)
|
||||
self.confirm_new_pwd_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.confirm_new_pwd_entry.grid(row=3, column=1, pady=5)
|
||||
# 确认新密码提示标签
|
||||
self.confirm_new_pwd_hint_label = ttk.Label(self.frame, text="", foreground="red")
|
||||
self.confirm_new_pwd_hint_label.grid(row=3, column=2, sticky=tk.W, pady=5, padx=5)
|
||||
# 显示确认新密码按钮
|
||||
ttk.Button(self.frame, text="👁️", command=lambda: self.toggle_pwd_visibility(self.confirm_new_pwd_entry)).grid(row=3, column=3, pady=5, padx=5)
|
||||
# 绑定确认新密码输入事件(实时验证)
|
||||
self.confirm_new_pwd_entry.bind('<KeyRelease>', self.validate_confirm_new_password)
|
||||
|
||||
# 修改密码按钮(初始置灰,需验证通过才激活)
|
||||
self.change_pwd_standard_btn = ttk.Button(self.frame, text="修改密码", command=self.change_password_standard, state=tk.DISABLED)
|
||||
self.change_pwd_standard_btn.grid(row=4, column=0, columnspan=2, pady=10)
|
||||
|
||||
# 返回按钮
|
||||
ttk.Button(self.frame, text="返回", command=self.controller.show_change_pwd_option_view).grid(row=5, column=0, columnspan=2, pady=5)
|
||||
|
||||
def toggle_pwd_visibility(self, entry):
|
||||
"""切换密码输入框的可见性"""
|
||||
if entry.cget('show') == '*':
|
||||
entry.config(show='')
|
||||
else:
|
||||
entry.config(show='*')
|
||||
|
||||
def validate_new_password(self, event):
|
||||
"""实时验证新密码格式(同注册密码规则)"""
|
||||
new_password = self.new_pwd_entry.get().strip()
|
||||
if not new_password:
|
||||
self.new_pwd_hint_label.config(text="", foreground="red")
|
||||
self.change_pwd_standard_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
|
||||
# 检查长度和字符类型
|
||||
if not (6 <= len(new_password) <= 10):
|
||||
self.new_pwd_hint_label.config(text="长度需6-10位", foreground="red")
|
||||
self.change_pwd_standard_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
has_upper = any(c.isupper() for c in new_password)
|
||||
has_lower = any(c.islower() for c in new_password)
|
||||
has_digit = any(c.isdigit() for c in new_password)
|
||||
if has_upper and has_lower and has_digit:
|
||||
self.new_pwd_hint_label.config(text="格式正确✅", foreground="green")
|
||||
# 触发确认新密码校验
|
||||
self.validate_confirm_new_password(None)
|
||||
else:
|
||||
self.new_pwd_hint_label.config(text="需包含大小写和数字", foreground="red")
|
||||
self.change_pwd_standard_btn.config(state=tk.DISABLED)
|
||||
|
||||
def validate_confirm_new_password(self, event):
|
||||
"""实时验证确认新密码是否与新密码一致"""
|
||||
new_password = self.new_pwd_entry.get().strip()
|
||||
confirm_new_pwd = self.confirm_new_pwd_entry.get().strip()
|
||||
|
||||
if not confirm_new_pwd:
|
||||
self.confirm_new_pwd_hint_label.config(text="", foreground="red")
|
||||
self.change_pwd_standard_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
|
||||
if confirm_new_pwd == new_password:
|
||||
self.confirm_new_pwd_hint_label.config(text="一致✅", foreground="green")
|
||||
# 新密码格式正确且确认一致,激活修改按钮
|
||||
if self.new_pwd_hint_label.cget("text") == "格式正确✅":
|
||||
self.change_pwd_standard_btn.config(state=tk.NORMAL)
|
||||
else:
|
||||
self.confirm_new_pwd_hint_label.config(text="不一致❌", foreground="red")
|
||||
self.change_pwd_standard_btn.config(state=tk.DISABLED)
|
||||
|
||||
def change_password_standard(self):
|
||||
"""处理通过原密码修改密码逻辑"""
|
||||
old_password = self.old_pwd_entry.get().strip()
|
||||
new_password = self.new_pwd_entry.get().strip()
|
||||
confirm_new_pwd = self.confirm_new_pwd_entry.get().strip()
|
||||
|
||||
self.controller.handle_change_password_standard(old_password, new_password, confirm_new_pwd)
|
||||
|
||||
def show_code_change_frame(self):
|
||||
"""显示通过验证码修改密码界面"""
|
||||
self.clear_window()
|
||||
self.frame = ttk.Frame(self.root, padding="20")
|
||||
self.frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||
|
||||
# 标题
|
||||
ttk.Label(self.frame, text="通过验证码修改密码", font=('微软雅黑', 12, 'bold')).grid(row=0, column=0, columnspan=2, pady=10)
|
||||
|
||||
# 邮箱显示
|
||||
ttk.Label(self.frame, text="邮箱:").grid(row=1, column=0, sticky=tk.W, pady=5)
|
||||
email_label = ttk.Label(self.frame, text=self.controller.current_email)
|
||||
email_label.grid(row=1, column=1, sticky=tk.W, pady=5)
|
||||
|
||||
# 获取验证码按钮
|
||||
self.get_pwd_code_btn = ttk.Button(self.frame, text="获取验证码", command=self.send_pwd_code)
|
||||
self.get_pwd_code_btn.grid(row=1, column=2, pady=5, padx=5)
|
||||
|
||||
# 验证码输入
|
||||
ttk.Label(self.frame, text="验证码:").grid(row=2, column=0, sticky=tk.W, pady=5)
|
||||
self.pwd_code_entry = ttk.Entry(self.frame, width=30)
|
||||
self.pwd_code_entry.grid(row=2, column=1, pady=5)
|
||||
|
||||
# 新密码输入(含实时验证)
|
||||
ttk.Label(self.frame, text="新密码:").grid(row=3, column=0, sticky=tk.W, pady=5)
|
||||
self.new_pwd_code_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.new_pwd_code_entry.grid(row=3, column=1, pady=5)
|
||||
# 新密码提示标签
|
||||
self.new_pwd_code_hint_label = ttk.Label(self.frame, text="", foreground="red")
|
||||
self.new_pwd_code_hint_label.grid(row=3, column=2, sticky=tk.W, pady=5, padx=5)
|
||||
# 显示新密码按钮
|
||||
ttk.Button(self.frame, text="👁️", command=lambda: self.toggle_pwd_visibility(self.new_pwd_code_entry)).grid(row=3, column=3, pady=5, padx=5)
|
||||
# 绑定新密码输入事件(实时验证)
|
||||
self.new_pwd_code_entry.bind('<KeyRelease>', self.validate_new_pwd_code)
|
||||
|
||||
# 确认新密码输入(含实时验证)
|
||||
ttk.Label(self.frame, text="确认新密码:").grid(row=4, column=0, sticky=tk.W, pady=5)
|
||||
self.confirm_new_pwd_code_entry = ttk.Entry(self.frame, width=30, show='*')
|
||||
self.confirm_new_pwd_code_entry.grid(row=4, column=1, pady=5)
|
||||
# 确认新密码提示标签
|
||||
self.confirm_new_pwd_code_hint_label = ttk.Label(self.frame, text="", foreground="red")
|
||||
self.confirm_new_pwd_code_hint_label.grid(row=4, column=2, sticky=tk.W, pady=5, padx=5)
|
||||
# 显示确认新密码按钮
|
||||
ttk.Button(self.frame, text="👁️", command=lambda: self.toggle_pwd_visibility(self.confirm_new_pwd_code_entry)).grid(row=4, column=3, pady=5, padx=5)
|
||||
# 绑定确认新密码输入事件(实时验证)
|
||||
self.confirm_new_pwd_code_entry.bind('<KeyRelease>', self.validate_confirm_new_pwd_code)
|
||||
|
||||
# 修改密码按钮(初始置灰,需验证通过才激活)
|
||||
self.change_pwd_code_btn = ttk.Button(self.frame, text="修改密码", command=self.change_password_with_code, state=tk.DISABLED)
|
||||
self.change_pwd_code_btn.grid(row=5, column=0, columnspan=2, pady=10)
|
||||
|
||||
# 返回按钮
|
||||
ttk.Button(self.frame, text="返回", command=self.controller.show_change_pwd_option_view).grid(row=6, column=0, columnspan=2, pady=5)
|
||||
|
||||
def validate_new_pwd_code(self, event):
|
||||
"""实时验证验证码修改中的新密码格式"""
|
||||
new_password = self.new_pwd_code_entry.get().strip()
|
||||
if not new_password:
|
||||
self.new_pwd_code_hint_label.config(text="", foreground="red")
|
||||
self.change_pwd_code_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
|
||||
# 检查长度和字符类型
|
||||
if not (6 <= len(new_password) <= 10):
|
||||
self.new_pwd_code_hint_label.config(text="长度需6-10位", foreground="red")
|
||||
self.change_pwd_code_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
has_upper = any(c.isupper() for c in new_password)
|
||||
has_lower = any(c.islower() for c in new_password)
|
||||
has_digit = any(c.isdigit() for c in new_password)
|
||||
if has_upper and has_lower and has_digit:
|
||||
self.new_pwd_code_hint_label.config(text="格式正确✅", foreground="green")
|
||||
# 触发确认新密码校验
|
||||
self.validate_confirm_new_pwd_code(None)
|
||||
else:
|
||||
self.new_pwd_code_hint_label.config(text="需包含大小写和数字", foreground="red")
|
||||
self.change_pwd_code_btn.config(state=tk.DISABLED)
|
||||
|
||||
def validate_confirm_new_pwd_code(self, event):
|
||||
"""实时验证验证码修改中的确认新密码"""
|
||||
new_password = self.new_pwd_code_entry.get().strip()
|
||||
confirm_new_pwd = self.confirm_new_pwd_code_entry.get().strip()
|
||||
|
||||
if not confirm_new_pwd:
|
||||
self.confirm_new_pwd_code_hint_label.config(text="", foreground="red")
|
||||
self.change_pwd_code_btn.config(state=tk.DISABLED)
|
||||
return
|
||||
|
||||
if confirm_new_pwd == new_password:
|
||||
self.confirm_new_pwd_code_hint_label.config(text="一致✅", foreground="green")
|
||||
# 新密码格式正确且确认一致,激活修改按钮
|
||||
if self.new_pwd_code_hint_label.cget("text") == "格式正确✅":
|
||||
self.change_pwd_code_btn.config(state=tk.NORMAL)
|
||||
else:
|
||||
self.confirm_new_pwd_code_hint_label.config(text="不一致❌", foreground="red")
|
||||
self.change_pwd_code_btn.config(state=tk.DISABLED)
|
||||
|
||||
def send_pwd_code(self):
|
||||
"""发送修改密码验证码"""
|
||||
self.controller.handle_send_pwd_code()
|
||||
|
||||
def change_password_with_code(self):
|
||||
"""处理通过验证码修改密码逻辑"""
|
||||
code = self.pwd_code_entry.get().strip()
|
||||
new_password = self.new_pwd_code_entry.get().strip()
|
||||
confirm_new_pwd = self.confirm_new_pwd_code_entry.get().strip()
|
||||
|
||||
self.controller.handle_change_password_with_code(code, new_password, confirm_new_pwd)
|
||||
|
||||
def clear_window(self):
|
||||
"""清空窗口所有组件"""
|
||||
for widget in self.root.winfo_children():
|
||||
widget.destroy()
|
||||
@ -0,0 +1,38 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
|
||||
a = Analysis(
|
||||
['src\\main.py'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
noarchive=False,
|
||||
optimize=0,
|
||||
)
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
a.binaries,
|
||||
a.datas,
|
||||
[],
|
||||
name='中小学数学学习软件',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
runtime_tmpdir=None,
|
||||
console=False,
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None,
|
||||
)
|
||||
Loading…
Reference in new issue