Окно tkinter автоматически закрывается после запуска .exe-файла

СЕЙЧАС РЕШЕНО

Я написал скрипт:

from tkinter import *

root= Tk()
root.title('Hello World')
text_label0 = Label(text = "Hello World!")
text_label0.pack()


root.mainloop()

Когда я запускаю его в блокноте Jupyter, окно tkinter отображается правильно и закрывается только при нажатии кнопки выхода. Ничего проблемного.

Но потом я преобразовал скрипт в .exe-файл. Его имя test1_tkinter.exe. Ранее это был test1_tkinter.ipynb.

Теперь, когда я дважды щелкаю test1_tkinter.exe, командный центр Windows открывается примерно на несколько миллисекунд и автоматически закрывается. Окно tkinter не открыто.

Я преобразовал test1_tkinter.ipynb в test1_tkinter.exe, чтобы ввести в командный центр Windows:

pyinstaller --onefile test1_tkinter.ipynb

и работало без проблем, потому что потом был создан test1_tkinter.exe.

Так что я не знаю, в чем причина проблемы. Может ли кто-нибудь помочь мне?

Обновлено: Большое спасибо за ваш быстрый и простой ответ, Orangepeels. Когда я делаю, как вы говорите, приходит:

C:\Users\Lenovo>pyinstaller test1_tkinter.ipynb --onefile --windowed
107 INFO: PyInstaller: 4.1
107 INFO: Python: 3.9.1
107 INFO: Platform: Windows-10-10.0.18362-SP0
108 INFO: wrote C:\Users\Lenovo\test1_tkinter.spec
111 INFO: UPX is not available.
122 INFO: Extending PYTHONPATH with paths
['C:\\Users\\Lenovo', 'C:\\Users\\Lenovo']
132 INFO: checking Analysis
147 INFO: Building because C:\Users\Lenovo\test1_tkinter.ipynb changed
147 INFO: Initializing module dependency graph...
151 INFO: Caching module graph hooks...
171 INFO: Analyzing base_library.zip ...
3843 INFO: Processing pre-find module path hook distutils from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
3845 INFO: distutils: retargeting to non-venv dir 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib'
6719 INFO: Caching module dependency graph...
6879 INFO: running Analysis Analysis-00.toc
6883 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by c:\users\lenovo\appdata\local\programs\python\python39\python.exe
6958 WARNING: lib not found: api-ms-win-core-path-l1-1-0.dll dependency of c:\users\lenovo\appdata\local\programs\python\python39\python39.dll
6976 INFO: Analyzing C:\Users\Lenovo\test1_tkinter.ipynb
6979 INFO: Processing module hooks...
6980 INFO: Loading module hook 'hook-difflib.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6983 INFO: Excluding import of doctest from module difflib
6983 INFO: Loading module hook 'hook-distutils.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6986 INFO: Loading module hook 'hook-distutils.util.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
6989 INFO: Excluding import of lib2to3.refactor from module distutils.util
6989 INFO: Loading module hook 'hook-encodings.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7107 INFO: Loading module hook 'hook-heapq.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7109 INFO: Excluding import of doctest from module heapq
7110 INFO: Loading module hook 'hook-lib2to3.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7180 INFO: Loading module hook 'hook-multiprocessing.util.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7182 INFO: Excluding import of test from module multiprocessing.util
7182 INFO: Excluding import of test.support from module multiprocessing.util
7183 INFO: Loading module hook 'hook-pickle.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7185 INFO: Excluding import of argparse from module pickle
7186 INFO: Loading module hook 'hook-sysconfig.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7188 INFO: Loading module hook 'hook-xml.etree.cElementTree.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7189 INFO: Loading module hook 'hook-xml.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7270 INFO: Loading module hook 'hook-_tkinter.py' from 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks'...
7447 INFO: checking Tree
7519 INFO: checking Tree
7628 INFO: checking Tree
7662 INFO: Looking for ctypes DLLs
7705 INFO: Analyzing run-time hooks ...
7709 INFO: Including run-time hook 'c:\\users\\lenovo\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py'
7720 INFO: Looking for dynamic libraries
8038 INFO: Looking for eggs
8039 INFO: Using Python library c:\users\lenovo\appdata\local\programs\python\python39\python39.dll
8040 INFO: Found binding redirects:
[]
8044 INFO: Warnings written to C:\Users\Lenovo\build\test1_tkinter\warn-test1_tkinter.txt
8112 INFO: Graph cross-reference written to C:\Users\Lenovo\build\test1_tkinter\xref-test1_tkinter.html
8129 INFO: checking PYZ
8144 INFO: Building because toc changed
8144 INFO: Building PYZ (ZlibArchive) C:\Users\Lenovo\build\test1_tkinter\PYZ-00.pyz
8880 INFO: Building PYZ (ZlibArchive) C:\Users\Lenovo\build\test1_tkinter\PYZ-00.pyz completed successfully.
8903 INFO: checking PKG
8906 INFO: Building because toc changed
8906 INFO: Building PKG (CArchive) PKG-00.pkg
10964 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
10967 INFO: Bootloader c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\bootloader\Windows-64bit\runw.exe
10967 INFO: checking EXE
10979 INFO: Building because console changed
10980 INFO: Building EXE from EXE-00.toc
10982 INFO: Appending archive to EXE C:\Users\Lenovo\dist\test1_tkinter.exe
11135 INFO: Building EXE from EXE-00.toc completed successfully.

Но когда я открываю .exe-файл, появляется сообщение об ошибке: «Не удалось выполнить скрипт test1_tkinter.exe»

Что я могу сделать сейчас?

Обновлено еще раз: Когда я открываю test1_tkinter.exe через командную строку, командная строка показывает следующее:

C:\Users\Lenovo\dist>test1_tkinter.exe
Traceback (most recent call last):
  File "test1_tkinter.ipynb", line 22, in <module>
NameError: name 'null' is not defined
[7536] Failed to execute script test1_tkinter

К сведению: всего 9 строк, 22 строчки в сценарии нет.

Это только тогда, когда я использую «pyinstaller --onefile test1_tkinter» для создания .exe-файла. Когда я использую «pyinstaller test1_tkinter --onefile --windowed», появляется сообщение об ошибке («Не удалось выполнить сценарий test1_tkinter.exe», - упоминалось выше) через дополнительное небольшое окно, и это окно не исчезает автоматически.

Привет, so_question_asker

Как только вы создадите файл в Windows cmd, не выходите из cmd, введите «test1_tkinter.exe», чтобы проверить его. Таким образом, вы увидите сообщение об ошибке, которое вызывает сбой программы.

Novel 20.12.2020 23:05

Спасибо за быстрый ответ, Роман. Я попробовал, и вы можете прочитать результат в основном посте после «EDIT 2».

cs_question_asker 21.12.2020 12:42

Я обновил ответ [stackoverflow.com/a/65386056/11688889] на основе ("EDIT 2"), см. ниже. удачи!

Zishe Schnitzler 21.12.2020 16:07

Большое спасибо, Зише! Теперь это сработало! Спасибо за стойкость в помощи мне. И спасибо всем остальным, кто тоже пытался решить мою проблему!

cs_question_asker 21.12.2020 18:43
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
1 349
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я считаю, что использование оконного флага решит проблему:

pyinstaller имя_файла — один файл — оконный

Пожалуйста, прочитайте в моем исходном сообщении над вашим комментарием после «Редактировать:»

cs_question_asker 20.12.2020 23:28

Вы используете conda или pip для установки pyinstaller? Это только мой личный опыт, но у меня были проблемы с использованием pyinstaller, когда он был установлен через conda. Я смог запустить ваш код, используя pyinstaller с файлом .py, а не с .ipynb. Как говорили другие, лучше всего запустить .exe непосредственно из открытой командной строки, чтобы вы могли прочитать сообщения об ошибках.

tvanvalkenburg 21.12.2020 02:54

Спасибо за ответ, Orangepeel. Я использовал pip для установки pyinstaller. Я сделал это дважды, так как столкнулся с проблемой, но лучше не стало. Я попробую идею с командной строкой. Спасибо.

cs_question_asker 21.12.2020 12:32

Теперь это работает. Спасибо всем, кто помогал мне!

cs_question_asker 21.12.2020 18:46
Ответ принят как подходящий

Скорее всего, есть сообщение об ошибке, но оно закрывается слишком быстро, чтобы его можно было прочитать.

Чтобы иметь возможность прочитать сообщение об ошибке, выполните следующие действия:

  1. Создайте exe-файл с окном (если его еще нет).
  2. Запустите исполняемый файл через командную строку Windows (CMD), используя «cd folder_path», чтобы перейти к папке, в которой находится «test1_tkinter.exe».
  3. Введите test1_tkinter.exe и введите, чтобы запустить приложение.

Сообщение об ошибке должно отображаться в окне командной строки и не закрываться сразу, чтобы вы могли продолжить изучение проблемы.

Обновлено:

На основании сообщения об ошибке: pyinstaller нуждается в файле .py для создания функционального файла .exe и не поддерживает преобразование из файлов .ipynb.

Лучше всего загрузить файл из блокнота jupyter («Файл» > «Загрузить как» > «Python (.py)»), а затем преобразовать его в файл .exe.

Большое спасибо, Зише. Я сделал, как вы описали, и разместил результат в основном комментарии после «EDIT 2». Пожалуйста, прочитайте выше. Большое спасибо.

cs_question_asker 21.12.2020 12:38

Большое спасибо, Зише! Теперь это сработало! Спасибо за стойкость в помощи мне. И спасибо всем остальным, кто тоже пытался решить мою проблему!

cs_question_asker 21.12.2020 18:43

Другие вопросы по теме