#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()