Tkinter в полностью исполняемое приложение windows - PullRequest
0 голосов
/ 22 января 2020

У меня есть скрипт в записной книжке Jupyter, который работает нормально, и сейчас я пытаюсь создать небольшую программу без необходимости постоянно открывать Jupyter. Я хочу щелкнуть по .exe, а затем загрузить файл, выбрать несколько фильтров для двух столбцов данных и вывести результат в Windows (если это также может работать на MA C, это было бы здорово).

Сначала я преобразую файл ноутбука в файл .py:

pip install nbconvert
jupyter nbconvert --to script my_notebook.ipynb

Затем я использую файл .py для преобразования в файл .exe

pip install pyinstaller
pyinstaller my_notebook.py

Или

pyinstaller.exe --onefile my_notebook.py

ПРИМЕЧАНИЕ. В случае, если Python3 не работает с pyinstaller, попробуйте следующее:

pip uninstall pyinstaller
pip install https://github.com/pyinstaller/pyinstaller/tarball/develop

Мой полный сценарий в файле .py:

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()

file_path = filedialog.askopenfilename()
print(file_path)

import pandas as pd
import datetime
from datetime import datetime as dt


df = pd.read_csv(file_path, parse_dates=["Date"], error_bad_lines=False)
df = df[df['ColumnA'] == 'ValueA']
df = df[df['Date'] == '11/11/2019']
df = df[df['Column2'].str.find("25961999") != -1]

df.head()

Я пытался отдельно передать значения, как правило, в переменную в Jupyter с помощью следующего:

import tkinter as tk

root = tk.Tk()

entry_text1 = tk.StringVar()
entry1 = tk.Entry(root, width=10, textvariable=entry_text1)
entry1.pack()

entry_text2 = tk.StringVar()
entry2 = tk.Entry(root, width=10, textvariable=entry_text2)
entry2.pack()

button = tk.Button(root, text='Click Me', command=lambda: mhello(entry_text1,entry_text2))
button.pack()

label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()

def mhello(var1,var2):
    mtext1=var1.get()
    mtext2=var2.get()
    print(mtext1)
    print(mtext2)

root.mainloop()

, и это работает. Мне удалось загрузить файл, добавить фильтры, необходимые для столбцов данных, и у него есть некоторые проблемы. Это не всегда работает:

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import datetime
from datetime import datetime as dt

root = tk.Tk()

#Load csv file from Windows
file_path = filedialog.askopenfilename() #'C:/Users/Radomer/Documents/#PYTHON/output_1.csv'

#Add first filter 
entry_text1 = tk.StringVar()
entry1 = tk.Entry(root, width=10, textvariable=entry_text1)
entry1.pack()

#Add second filter
entry_text2 = tk.StringVar()
entry2 = tk.Entry(root, width=10, textvariable=entry_text2)
entry2.pack()

button = tk.Button(root, text='Click Me', command=lambda: mhello(entry_text1,entry_text2))
button.pack()

label_text = tk.StringVar()
label = tk.Label(root, textvariable=label_text)
label.pack()

def mhello(var1,var2):
    mtext1=var1.get()
    mtext2=var2.get()
    #print(mtext1)
    #print(mtext2)
    #Filter loaded data stream based on the input values for the column values (date, field contains string)
    df = pd.read_csv(file_path, parse_dates=['Date'], error_bad_lines=False)
    df = df[df['ColumnA'] == mtext1] 
    df = df[df['Date'] == mtext2] 
    df = df[df['Column2'].str.find('25961999') != -1]
    print(df)
    root.withdraw()

root.mainloop()

Это работает, только если я закрою Jupyter и снова открою. Это почему? Нужно ли что-то менять с помощью root?

...