Python 3.4 GUI单个可执行文件

时间:2015-01-27 00:31:30

标签: python user-interface tkinter py2exe pyinstaller

今天我开始学习python。我只使用过PHP来处理各种各样的事情,而且从不必费心去构建exe文件。

使用一些互联网Python编程教程和我自己的一些编辑,我想出了随机的#34;你点击了多少次"申请如下图所示

import winsound
from tkinter import *

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self,master)
        self.pack()
        self.counts = 0
        self.create_widgets()

    def create_widgets(self):
        Label(self, text = "Test Label").pack()
        self.button = Button(self, text = "click", command = self.update_text).pack()

        self.result = Label(self, text = "Clicked 0 times")
        self.result.pack()

    def update_text(self):
        self.counts += 1

        self.result["text"] = "Clicked " + str(self.counts) + " times"

        winsound.PlaySound('sound1.wav', winsound.SND_FILENAME | winsound.SND_ASYNC)


root = Tk()
root.title("Title")
root.geometry("300x120")
app = Application(root)

root.mainloop

应用程序运行正常,但是当我尝试将其编译为单个exe文件时出于方便原因问题就开始了,因为我打算写一些小的东西,让事情变得更容易一些。程式。 Py2Exe根本不想用bundle_files 1编译程序。 PyInstaller确实用--onefile编译它,但是在执行时,应用程序只给你提供tkinter错误。

有没有办法用GUI创建小的一个exe文件,还是死路一条? 我不会撒谎,但我真的很喜欢学习python的想法,并且能够在Web和桌面应用程序中使用它,这在PHP中是不可能的。

我正在使用Python 3.4并测试内置py2exe和开发PyInstaller for Python 3.3 - 3.4。

编辑: 示例setup.py for py2exe和错误

from distutils.core import setup
import py2exe
setup( windows=[{"script": "text.py"}],
       options = {"py2exe": {"bundle_files": 1}
})

错误

C:\Users\SEJBR\Desktop\Python>python setup.py py2exe
running py2exe

  1 missing Modules
  ------------------
? readline                            imported from cmd, code, pdb
OOPS: tkinter 2

PyInstaller编译错误

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'Tkinter'
2515 ERROR: TCL/TK seams to be not properly installed on this system

1 个答案:

答案 0 :(得分:0)

那么解决方法很简单..我降级到Python 2.7.9并且PyInstaller完美地编译了应用程序而没有任何问题。 我刚用过

from __future__ import print_function
from __future__ import division

使用Python 3.X打印功能并应用分区更改。如果有人想出真正的解决方案,请回答这个问题。