在 Python 3.4 中创建跨平台 GUI

Creating a cross-platform GUI in Python 3.4

我正在构建一个 GUI,它可以将 .txt 或 .xlsx 文件作为输入,对它们执行一些操作并将结果 returns 作为绘图。我正在为 GUI 使用 Python 3.4 和 Tkinter 8.5。

它有一个用于 select 文件类型的下拉列表和一个用于打开 select 文件对话框的按钮。然后它将文件的内容保存到同一目录中的不同文件中。它还有一个退出程序的按钮、一个文本框和一个我只是在玩但没有任何作用的标签。

当我 运行 datagui.py 文件时,GUI 工作。但是我也想制作一个不需要 Python 到 运行 的跨平台文件。为此,我使用 cx_freeze 制作了一个 exe,并编写了以下 setup.py 文件来构建它(也可在 cx_Freeze 网站上找到):

import sys
from cx_Freeze import setup, Executable

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

setup(  name = "datagui",
        version = "0.1",
        description = "My first GUI application",
        executables = [Executable("datagui.py", base=base)])

当我尝试 运行 位于 ...\build\exe.win-amd64-3.4 目录中的 datagui.exe 文件时,出现以下错误:

---------------------------
cx_Freeze: Python error in main script
---------------------------
Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  File "datagui.py", line 3, in <module>
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
  File "C:\Users\Anish\Desktop\DR. DIXON\Data Analysis\python codes\dataselect.py", line 3, in <module>
    from pylab import *
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
  File "C:\Anaconda3\lib\site-packages\pylab.py", line 1, in <module>
    from matplotlib.pylab import *
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
  File "C:\Anaconda3\lib\site-packages\matplotlib\pylab.py", line 274, in <module>
    from matplotlib.pyplot import *
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2226, in _find_and_load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1191, in _load_unlocked
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 1161, in _load_backward_compatible
  File "C:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 109, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "C:\Anaconda3\lib\site-packages\matplotlib\backends\__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2237, in _find_and_load
  File "c:\Python-bit.4\lib\importlib\_bootstrap.py", line 2224, in _find_and_load_unlocked
ImportError: No module named 'matplotlib.backends.backend_qt4agg'

我做错了什么?

您可能想检查一下您的 matplotlib 配置。

See this previous answer on matplotlib import

您需要指明您希望 matplotlib 实现的后端类型。

import matplotlib
matplotlib.use("Agg")

http://matplotlib.org/users/customizing.html