2016-01-15 68 views
5

我一直在處理這個好幾天了,希望能找到一些幫助。我開發了一個帶有導入模塊tkinter,numpy,scipy,matplotlib的GUI應用程序,它在Python本身中運行良好。轉換爲* .exe後,所有內容都按預期工作,但不是matplotlib部分。當我按下我定義的繪圖按鈕時,* .exe只是簡單地關閉並且不顯示任何繪圖。 所以我想做一個簡約的例子,在那裏我簡單地繪製一個sin函數,並且我面臨同樣的問題: 在python中完美工作時,將其轉換爲* .exe時,按下plot按鈕時崩潰。簡約的例子在這裏:cx_freeze轉換後的GUI應用程序(tkinter)崩潰後按劇情按鈕

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

並看到我的相應的「setup.py」與cx_freeze轉換。

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發行版和Python 3.4.3。

+0

知道這個問題是否與Windows 10相關,或者是否與其他Windows版本相同,將會很有趣。 –

+0

啊,對不起,我忘了提及它。在Windows 7,64位機器上發生同樣的WinPython分發問題。 – PuseMuckeL

+0

剛剛在32位XP上試過這個沒有問題,我會在64位win7以後嘗試它 –

回答

19

我在測試PyInstaller時使用相同的test.py發現了一個潛在的解決方案(或者至少是解釋)。我收到有關dll文件丟失的錯誤消息,該文件爲mkl_intel_thread.dll

我搜索了該文件,它被發現在numpy文件夾中。 我複製的文件匹配MKL _ *。dll的libiomp5md.dll到同一個目錄中由python setup.py build創建test.exe的了。在這之後,最小的test.exe顯示了按下按鈕時的matplotlib窗口。

這些文件位於文件夾lib \ site-packages \ numpy \ core

+0

這是驚人的傢伙。我嘗試了很多其他的東西,沒有奏效。但即使對於我更復雜的GUI和繪圖而言,它也可以工作。哇,非常感謝! – PuseMuckeL

+2

我正在使用Anaconda並且DLL不在lib/site-packages/numpy/code文件夾中。相反,我在Anaconda/Library/bin中找到了它們。 –

+0

在世界上你是如何知道如何使用libiomp5md.dll而不是其他的東西?你可以分享一下你的思考過程嗎?如果我將來遇到類似的問題,它會幫助我。這個答案對我來說很神奇。我認真地認爲它不會起作用。我的程序非常複雜。但你的解決方案只是簡單的作品 – Frikster

相關問題