我正在尝试制作一个exe。我有一个更复杂的程序,对我来说很好用,我已经发布了有关here的程序。我试图将这个示例简化到最少的元素数量和测试。基本上,我需要一个程序来创建图,并使用按钮从该图添加和删除内容。当我在python IDE上运行它时,此方法工作正常,但是当我创建并冻结的.exe时,双击它不会发生任何反应。我更复杂的程序也是如此。
这是我要写入的代码,并将.exe作为测试(我将此代码另存为'Test1.py'):
#Filename should be Test1.py for this
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
class plotter(object):
staff, staff_ax=plt.subplots(figsize=(6, 4))
staff_ax.axhline(y=1, color='0', linestyle='-')
item_1,=staff_ax.plot(0,0,alpha=0)
staff_ax.set_ylim(-15,25)
staff_ax.set_xlim(0,10)
error_1=0
pressed=0
def add_item(self, event):
if self.pressed==0:
self.item_1,=self.staff_ax.plot(5,5, marker='o')
self.staff.show()
self.pressed=1
def del_item(self, event):
try:
self.item_1
self.item_1.remove()
except ValueError:
self.error_1+=1
self.staff.show()
self.pressed=0
callback = plotter()
b1_loc = plt.axes([0.1, 0.05, 0.2, 0.075])
b2_loc = plt.axes([0.3, 0.05, 0.2, 0.075])
b_show = Button(b1_loc, 'Plot')
b_show.on_clicked(callback.add_item)
b_del = Button(b2_loc, 'Remove')
b_del.on_clicked(callback.del_item)
然后将以下内容用作我的安装文件(setup.py):
#Filename should be setup.py
from cx_Freeze import setup, Executable
import os
os.environ['TCL_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tk8.6'
import sys
base = 'Win32GUI'
if sys.platform == 'win32':
base = 'Win32GUI'
additional_mods = ['numpy.core._methods', 'numpy.lib.format',
"matplotlib.backends.backend_tkagg", 'matplotlib.pyplot',
'matplotlib.image', 'matplotlib.widgets']
setup(
name = "TEst1",
version = "1.0.0",
author = "Bart",
author_email = "******@gmail.com",
options = {"build_exe": {'includes':
additional_mods,"packages":["pygame","tkinter",'random', 'matplotlib'],}},
executables = [Executable("Test1.py", base=base)],
)
我跑步时
python setup.py build
它运行正常,并创建一个包含“ Test1.exe”的文件结构“ build”。但是,当我运行Test1.exe时,什么都没有发生。没有错误,什么也没有。 “ Test1.exe”中的代码是我认为可以测试的最简单的coed版本。我已经测试了cx-freeze上的一些示例,以确保它已在我的计算机上正确安装并运行。
有人知道我怎么能写这个,使其可以作为exe运行吗?我的怀疑是我需要将情节发送到TK窗口。换句话说,将我的代码首先放在root.TK()中,然后将root.mainloop()结尾,但是我不知道如何。
工作时,Test1.py的输出应为交互式绘图,如下所示:
“绘图”按钮添加图像中可见的点,而“移除”按钮则删除图像。