python - 按下绘图按钮后 cx_Freeze 转换的 GUI 应用程序 (tkinter) 崩溃

标签 python python-3.x matplotlib tkinter cx-freeze

我已经处理这个问题好几天了,希望能得到一些帮助。我开发了一个带有导入模块 tkinter、numpy、scipy、matplotlib 的 GUI 应用程序,它在 python 本身中运行良好。转换为 exe 后,一切都按预期工作,但不是 matplotlib 部分。当我按下我定义的绘图按钮时,exe 只是关闭并且不显示任何绘图。 所以我想做一个最小的例子,我简单地绘制了一个 sin 函数并且我面临着同样的问题: 在 python 中完美运行,当将其转换为 exe 时,按下绘图按钮时它会崩溃。这是最小的例子:

import tkinter as tk
import matplotlib.pyplot as plt
import numpy as np

class MainWindow(tk.Frame):
    def __init__(self):
        tk.Frame.__init__(self,bg='#9C9C9C',relief="flat", bd=10)
        self.place(width=x,height=y)
        self.create_widgets()

    def function(self):
        datax = np.arange(-50,50,0.1)
        datay = np.sin(datax)
        plt.plot(datax,datay)
        plt.show()

    def create_widgets(self):
        plot = tk.Button(self, text='PLOT', command=self.function)
        plot.pack()


x,y=120,300
root=tk.Tk()
root.geometry(str(x)+"x"+str(y))
app = MainWindow()
app.mainloop()

这是我使用 cx_Freeze 进行转换的相应 setup.py:

import cx_Freeze
import matplotlib
import sys
import numpy
import tkinter

base = None

if sys.platform == "win32":
    base = "Win32GUI"

executables = [cx_Freeze.Executable("test.py", base=base)]


build_exe_options = {"includes":   ["matplotlib.backends.backend_tkagg","matplotlib.pyplot",
                             "tkinter.filedialog","numpy"],
                     "include_files":[(matplotlib.get_data_path(), "mpl-data")],
                     "excludes":[],
                    }

cx_Freeze.setup(
    name = "test it",
    options = {"build_exe": build_exe_options},
    version = "1.0",
    description = "I test it",
    executables = executables)

非常感谢任何可能解决问题的想法。我在 64 位 Windows10 机器上工作,我正在使用 WinPython Distribution 和 Python 3.4.3。

最佳答案

在使用相同的 test.py 测试 PyInstaller 时,我找到了此问题的潜在解决方案(或至少是解释)。我收到有关缺少 dll 文件的错误消息,该文件是 mkl_intel_thread.dll

我搜索了那个文件,它位于 numpy 文件夹中。 我将匹配 mkl_*.dlllibiomp5md.dll 的文件复制到由 python setup 创建的 test.exe 所在的同一目录.py build 是。在此之后,最小的 test.exe 在按下 plot 按钮时显示了 matplotlib 窗口。

文件位于文件夹 lib\site-packages\numpy\core 中。

关于python - 按下绘图按钮后 cx_Freeze 转换的 GUI 应用程序 (tkinter) 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34806650/

相关文章:

python - ImportError :libpng16. so.16 无法打开共享对象文件

python - PyQtChart不显示数据

python - Python 3.52 中的字符串或对象比较

python - 如何在Python中从文本文件读取input()

python-3.x - 有没有办法在 pandas read_sql 函数中设置超时?

python - 在 matplotlib 3d 散点图中更改数据点的颜色并通过按键将其删除

python - 循环遍历 2d 子图,就好像它是 1-D

Python-从外部进程复制时如何知道文件是否完成

python - 增量构建一个 numpy 数组并测量内存使用情况

python - 在 numpy/matplotlib 中以图形和数字方式求解线性二次方程组?