2016-04-18 11 views
1

Pythonでのコーディングにスターを付け、cx freezeを使って.exeスタンドアロンを作成したかったのですが、tkinterに問題があります。私は非常に単純なウィンドウを生成することができましたが、tkinterを追加するともう動作しません。ここでcx_freezeでpyスクリプトをフリーズするときの問題

は私のコードです:

tkinter2.py:

#!/usr/bin/env python 
    # -*-coding:Latin-1 -* 


    import tkinter 

    base = None 

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

    TK=Tk() 

    # Function called when user hit the keyboard 
    def clavier(event): 
     global coords 

     touche = event.keysym 

     if touche == "Up": 
      coords = (coords[0], coords[1] - 10) 
     elif touche == "Down": 
      coords = (coords[0], coords[1] + 10) 
     elif touche == "Right": 
      coords = (coords[0] + 10, coords[1]) 
     elif touche == "Left": 
      coords = (coords[0] -10, coords[1]) 
     # change of coordinates for the rectangle 
     canvas.coords(rectangle, coords[0], coords[1], coords[0]+25, coords[1]+25) 

    # canvas creation 
    canvas = Canvas(TK, width=250, height=250, bg="ivory") 
    # initial coord 
    coords = (0, 0) 
    #rectangle creation 
    rectangle = canvas.create_rectangle(0,0,25,25,fill="violet") 
    canvas.focus_set() 
    canvas.bind("<Key>", clavier) 
    # canvas creation 
    canvas.pack() 

が続いてCMDで、これは私が何をすべきかです: 私はCに行く:\ Python34とpython.exe「スクリプトを打ちます\ cxfreeze "" Scripts \ tkinter2.py " コンパイルされているようですが、いくつかのモジュールが欠けているようですが、これはtkinterのようです。作成された.exeを起動すると、 "ImportError:モジュール名が 'Tkinter'ではありません。 私はPython 3.4を使用しており、対応するcx_freezeをインストールしています。

このようなエラーが発生した理由はありますか?それは、pyスクリプトをフリーズするときに、tkinterの基本的なコンポーネントの一部を使用できないためですか?

おかげで、 STAP

答えて

0

あなたがsetup.pyファイルを作成しますCX_Freezeを使用する際に一般的に(あなたが好きな名前に変更できます)。ビルドするには一般に 'python setup.py build'を実行します(これはコマンドプロンプトにあり、setup.pyとtkinter2.pyファイルが保存されているディレクトリに移動します)。 TkがCxフリーズでビルドできない最も一般的な理由は、DLLファイルが不足していることです。以下のコードでsetup.pyを作成し、それを試してみる:

import sys 
import cx_Freeze 
import os.path 


base = None 

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


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

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


options = { 
    'build_exe': { 

     'include_files':[ 
      os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), 
      os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), 


     ], 
    }, 

} 

cx_Freeze.setup(
    name = "Stack Overflow Q", 
    options = options, 
    version = "1.0", 
    description = 'Stack Overflow Q', 
    executables = executables 
) 

編集:私はまた、あなたのプログラムの最後でTK.mainloop()を持っていない気づい

関連する問題