【发布时间】:2019-01-27 01:43:35
【问题描述】:
我正在尝试创建一个独立程序,但无法让最终输出真正正常运行。我的实际代码是专有的,但我认为以下是一个不错的工作示例:
import pandas as pd
import tkinter as tk
from tkinter import filedialog
#from datetime import datetime
# GUI
#------------------------------------------------------------------------------
# Window if no changes
def window_if_empty(self,message):
win = tk.Tk()
win.geometry("400x300")
win.title("Empty Output")
Message = tk.Label(win, text = message)
Message.pack()
Close = tk.Button(win, text = "Close Window", command = win.destroy)
Close.pack(anchor = "center")
win.mainloop()
class Main(object):
def __init_(self):
pass
# Create Main Page
def MainPage(self,root):
root.title("Test GUI")
# Button for tracking changes
track_changes = tk.Button(root, text = "Identify Changes Between Spreadsheets", command = self.Track_Changes)
track_changes.place(relx = 0.5, rely = 0.4, anchor = "center")
def Track_Changes(self):
name_1 = filedialog.askopenfilename(initialdir = "/", title = "Select file #1", filetypes = (("xlsx files","*.xlsx"),("csv files", "*.csv"),("all files","*.*")))
name_2 = filedialog.askopenfilename(initialdir = "/", title = "Select file #2", filetypes = (("xlsx files","*.xlsx"),("csv files", "*.csv"),("all files","*.*")))
# Import File #1
if name_1.endswith('.csv'):
self.File_1 = pd.read_csv(name_1)
elif name_1.endswith('.xlsx'):
self.File_1 = pd.read_excel(name_1)
# Import File #2
if name_2.endswith('.csv'):
self.File_2 = pd.read_csv(name_2)
elif name_2.endswith('.xlsx'):
self.File_2 = pd.read_excel(name_2)
merged = self.File_1.merge(self.File_2, how = "outer", indicator = True)
old_data = merged[merged["_merge"] == "left_only"]
old_data = old_data.reset_index(drop = True)
new_data = merged[merged["_merge"] == "right_only"]
new_data = new_data.reset_index(drop = True)
self.Changed = new_data
if self.Changed.empty:
window_if_empty(self, "No changes tracked between LMS files.")
else:
save_name = filedialog.asksaveasfilename(defaultextension = ".csv", title = "Save Changes As...") #.asksaveasfilename(mode = 'w', defaultextension = ".csv")
self.Changed.to_csv(save_name, index = False)
# Run GUI
#------------------------------------------------------------------------------
root = tk.Tk()
root.geometry("500x500")
App = Main()
App.MainPage(root)
root.mainloop()
我使用以下设置文件使用 cx_Freeze 构建:
from cx_Freeze import setup, Executable
import os
# Freeze
#------------------------------------------------------------------------------
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
Options = {
'build_exe': {
'include_files':[
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
], 'includes':['numpy', 'pandas', 'tkinter', 'datetime', 'atexit']
},
}
setup(options = Options ,
name = "Document Prep" ,
version = "0.1" ,
description = "" ,
executables = [Executable("test_GUI.py", base = "Win32GUI")])
我最初在将 numpy 包含为可识别的库时出错,但我使用 this link here 的建议解决了这个问题(我认为),将 _methods 文件从 numpy 驱动程序文件复制到我的本地 @987654325 @ 目录。我现在的问题是,当我双击可执行文件时,什么也没有发生。什么都没有开始,没有错误,我不知道如何解决这个问题。任何帮助表示赞赏。
供参考:我有一台 MacBook,但我在我机器上的 Windows 分区上运行所有这些。我也有一个带有 Python3 的 Conda 发行版。
【问题讨论】:
标签: python build executable cx-freeze