Код Tkinter отлично запускается из spyder, но при преобразовании в .exc не открывается (python)

#python #tkinter #pyinstaller #executable

#python #tkinter #pyinstaller #исполняемый файл

Вопрос:

У меня есть некоторый код, который предназначен для поиска пути к папке с файлами данных, извлечения и очистки данных, а затем возврата одного фрейма данных pandas, который можно сохранить. Чтобы сделать его более удобным для пользователя, я добавил пользовательский интерфейс с помощью tkinter. В spyder все работает нормально, и создание исполняемого файла с помощью pyinstaller, похоже, работает нормально, но когда я пытаюсь запустить .exc, он просто открывает пустое окно командной строки, не открывая пользовательский интерфейс. Он не выдает никаких ошибок, поэтому я не знаю, с чего начать отладку, любая помощь с благодарностью получена.

Мой код состоит из четырех файлов:

tidyEPR.py (единственная функция, которая открывает и очищает один файл epr. Пакеты: Pandas)

rowNames.csv (содержит имена переменных.)

combEPRs.py (единственная функция, которая перебирает файлы данных и вызывает tidyEPR() для объединения данных в один фрейм данных и открывает файл rowNames.csv для переименования строк. Пакеты: Pandas, pathlib, glob)

practice.py (приложение tkinter, которое позволяет пользователю вводить данные и сохранять местоположения и нажимать кнопку для запуска, вызывает combEPRs. Пакеты: Tkinter, os, sys)

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

pyinstaller —onefile practice.py

или

pyinstaller practice.py

в cmd в обоих случаях он, по-видимому, выполняется успешно и создает файл .exc.

Ошибок не возникает. Я попытался преобразовать другой скрипт tkinter с помощью вышеуказанного метода, и он работает нормально, так что с моим кодом определенно что-то не так.

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

Вот practice.py:

 import tkinter as tk
import os
import sys
#import custom functions
from combEPRs import combEPRs


#set working directory to file location
os.chdir(os.path.dirname(sys.argv[0]))

window = tk.Tk()

#initilaise df
df="empty"

def makeFile():
    global df
    #retrive entered text
    enteredText = ent_dataPath.get()
    #create dataframe from data files in entred path
    df = combEPRs(enteredText)
    #update label to show the finished dataframe
    lbl_ConsoleReadout.config(text=df)

def saveFile():
    global df
    #change label to say "saving..."
    lbl_ConsoleReadout.config(text="saving...")
    #retrive entered text
    enteredText = ent_savePath.get()
    #save dataframe
    df.to_csv(enteredText)
    #change label text to say "Done!"
    lbl_ConsoleReadout.config(text="Done!")

frame = tk.Frame(borderwidth=5)
frame.pack()

#make label to explain what to do
lbl_info = tk.Label(
    text="Put full path to the data folder then press go, if you are hapy with output put in full save path and press save", 
    master = frame,
)
lbl_info.pack(pady=10)

#make text entry widget to get path to data folder
ent_dataPath = tk.Entry(
    master = frame,
    width = 100
)
ent_dataPath.pack(pady=10)

#make button to press to submit folder to combEPRs
btn_go = tk.Button(
    text="GO",
    width = 10,
    height = 2,
    master = frame,
    command = makeFile
)
btn_go.pack(pady=10)

#make text widget to print output to.
lbl_ConsoleReadout = tk.Label(
    width = 100
)
lbl_ConsoleReadout.pack()

#make text entry widget to get path to to save to
ent_savePath = tk.Entry(
    master = frame,
    width = 100
)
ent_savePath.pack(pady=10)

#make save button
btn_save = tk.Button(
    text="SAVE",
    width = 10,
    height = 2,
    master = frame,
    command = saveFile
)
btn_save.pack(pady=10)

window.mainloop()