如何为 matplotlib 构建 python class 结构以使用 cx_freeze 导出 ot .exe?
How to build python class structure for matplotlib to export ot .exe with cx_freeze?
我构建了一个代码来生成和播放随机音符。它在 python 中运行良好,但我想将它变成一个 .exe 独立程序,这样没有 python 的人也可以使用它。我在下面显示了输出图像。它创建了一个带有 'TkAgg' 后端的 matplotlib 图。有 5 个按钮和一个用户输入框,都可以使用。
我用 cx_freeze 尝试打包它,并解决了所有错误。我也得到了一些例子来工作。我可以看到 build 文件夹正在获取 4 个图像和许多我需要绘制乐谱和演奏音符的 .wav 文件。一个错误表明 .exe 试图 运行 我的代码,因为它找不到 .wav 文件)。我更改了为 .exe 指定它们所在位置的方式。但是现在当我 运行 .exe 没有任何反应。
不幸的是我的代码是一个怪物。它很乱,而且有点长(如果算上白色,则有 750 行 space)。我试图写入 .exe 的 .py 文件是 Interval_Trainer_v1_1.py。可以查到here.
因为它在 python 中有效,但在 .exe 中无效,我认为这可能与我不知道如何将 classes 与绘图结合使用有关。基本上我调用了class,然后初始化了一堆东西,以便我以后可以参考它们。这让我可以删除之前绘制的笔记、旧答案等。
我如何练习构建 'TkAgg' 将在 cf_freeze 之后正确执行的后端图形?我觉得我需要从一些基本的想法开始,然后构建我的应用程序,这相当复杂。
一个音符,我确实使用 pygame 作为声音。
这是我的安装文件:
from cx_Freeze import setup, Executable
import os
os.environ['TCL_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tk8.6'
import sys
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
additional_mods = ['numpy.core._methods', 'numpy.lib.format',"matplotlib.backends.backend_tkagg", 'matplotlib.pyplot', 'matplotlib.image', 'matplotlib.widgets']
setup(
name = "Interval Trainer",
version = "1.0.0",
author = "Bart",
author_email = "bcubrich@gmail.com",
options = {"build_exe": {'includes': additional_mods,"packages":["pygame","tkinter",'random'],
"include_files": [
'Images/F cleff 8vb.png', 'Images/F cleff.png',
'Images/G cleff 8vb.png', 'Images/G cleff.png',
'Pitches/A#1.wav', 'Pitches/A#2.wav', 'Pitches/A#3.wav',
'Pitches/A#4.wav', 'Pitches/A#5.wav', 'Pitches/A1.wav',
'Pitches/A2.wav', 'Pitches/A3.wav', 'Pitches/A4.wav',
'Pitches/A5.wav', 'Pitches/Ab1.wav', 'Pitches/Ab2.wav',
'Pitches/Ab3.wav', 'Pitches/Ab4.wav', 'Pitches/B#2.wav',
'Pitches/B#3.wav', 'Pitches/B#4.wav', 'Pitches/B1.wav',
'Pitches/B2.wav', 'Pitches/B3.wav', 'Pitches/B4.wav',
'Pitches/B5.wav', 'Pitches/Bb1.wav', 'Pitches/Bb2.wav',
'Pitches/Bb3.wav', 'Pitches/Bb4.wav', 'Pitches/C#2.wav',
'Pitches/C#3.wav', 'Pitches/C#4.wav', 'Pitches/C#5.wav',
'Pitches/C2.wav', 'Pitches/C3.wav', 'Pitches/C4.wav',
'Pitches/C5.wav', 'Pitches/C6.wav', 'Pitches/D#2.wav',
'Pitches/D#3.wav', 'Pitches/D#4.wav', 'Pitches/D#5.wav',
'Pitches/D2.wav', 'Pitches/D3.wav', 'Pitches/D4.wav',
'Pitches/D5.wav', 'Pitches/Db1.wav', 'Pitches/Db2.wav',
'Pitches/Db3.wav', 'Pitches/Db4.wav', 'Pitches/E#2.wav',
'Pitches/E#3.wav', 'Pitches/E#4.wav', 'Pitches/E1.wav',
'Pitches/E2.wav', 'Pitches/E3.wav', 'Pitches/E4.wav',
'Pitches/E5.wav', 'Pitches/Eb2.wav', 'Pitches/Eb3.wav',
'Pitches/Eb4.wav', 'Pitches/F#1.wav', 'Pitches/F#2.wav',
'Pitches/F#3.wav', 'Pitches/F#4.wav', 'Pitches/F#5.wav',
'Pitches/F1.wav', 'Pitches/F2.wav', 'Pitches/F3.wav',
'Pitches/F4.wav', 'Pitches/F5.wav', 'Pitches/G#1.wav',
'Pitches/G#2.wav', 'Pitches/G#3.wav', 'Pitches/G#4.wav',
'Pitches/G#5.wav', 'Pitches/G1.wav', 'Pitches/G2.wav',
'Pitches/G3.wav', 'Pitches/G4.wav', 'Pitches/G5.wav',
'Pitches/Gb1.wav', 'Pitches/Gb2.wav', 'Pitches/Gb3.wav',
'Pitches/Gb4.wav']}},
executables = [Executable("Interval_trainer_v1_1.py", base=base)],
)
Output Image
感谢您的帮助。
请参阅 matplotlib
用户界面示例 embedding_in_tk and embedding_in_tk2 以练习构建 TkAgg
后端图形。
我构建了一个代码来生成和播放随机音符。它在 python 中运行良好,但我想将它变成一个 .exe 独立程序,这样没有 python 的人也可以使用它。我在下面显示了输出图像。它创建了一个带有 'TkAgg' 后端的 matplotlib 图。有 5 个按钮和一个用户输入框,都可以使用。
我用 cx_freeze 尝试打包它,并解决了所有错误。我也得到了一些例子来工作。我可以看到 build 文件夹正在获取 4 个图像和许多我需要绘制乐谱和演奏音符的 .wav 文件。一个错误表明 .exe 试图 运行 我的代码,因为它找不到 .wav 文件)。我更改了为 .exe 指定它们所在位置的方式。但是现在当我 运行 .exe 没有任何反应。
不幸的是我的代码是一个怪物。它很乱,而且有点长(如果算上白色,则有 750 行 space)。我试图写入 .exe 的 .py 文件是 Interval_Trainer_v1_1.py。可以查到here.
因为它在 python 中有效,但在 .exe 中无效,我认为这可能与我不知道如何将 classes 与绘图结合使用有关。基本上我调用了class,然后初始化了一堆东西,以便我以后可以参考它们。这让我可以删除之前绘制的笔记、旧答案等。
我如何练习构建 'TkAgg' 将在 cf_freeze 之后正确执行的后端图形?我觉得我需要从一些基本的想法开始,然后构建我的应用程序,这相当复杂。
一个音符,我确实使用 pygame 作为声音。
这是我的安装文件:
from cx_Freeze import setup, Executable
import os
os.environ['TCL_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY']=r'C:\Users\Bart\Anaconda3\tcl\tk8.6'
import sys
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
additional_mods = ['numpy.core._methods', 'numpy.lib.format',"matplotlib.backends.backend_tkagg", 'matplotlib.pyplot', 'matplotlib.image', 'matplotlib.widgets']
setup(
name = "Interval Trainer",
version = "1.0.0",
author = "Bart",
author_email = "bcubrich@gmail.com",
options = {"build_exe": {'includes': additional_mods,"packages":["pygame","tkinter",'random'],
"include_files": [
'Images/F cleff 8vb.png', 'Images/F cleff.png',
'Images/G cleff 8vb.png', 'Images/G cleff.png',
'Pitches/A#1.wav', 'Pitches/A#2.wav', 'Pitches/A#3.wav',
'Pitches/A#4.wav', 'Pitches/A#5.wav', 'Pitches/A1.wav',
'Pitches/A2.wav', 'Pitches/A3.wav', 'Pitches/A4.wav',
'Pitches/A5.wav', 'Pitches/Ab1.wav', 'Pitches/Ab2.wav',
'Pitches/Ab3.wav', 'Pitches/Ab4.wav', 'Pitches/B#2.wav',
'Pitches/B#3.wav', 'Pitches/B#4.wav', 'Pitches/B1.wav',
'Pitches/B2.wav', 'Pitches/B3.wav', 'Pitches/B4.wav',
'Pitches/B5.wav', 'Pitches/Bb1.wav', 'Pitches/Bb2.wav',
'Pitches/Bb3.wav', 'Pitches/Bb4.wav', 'Pitches/C#2.wav',
'Pitches/C#3.wav', 'Pitches/C#4.wav', 'Pitches/C#5.wav',
'Pitches/C2.wav', 'Pitches/C3.wav', 'Pitches/C4.wav',
'Pitches/C5.wav', 'Pitches/C6.wav', 'Pitches/D#2.wav',
'Pitches/D#3.wav', 'Pitches/D#4.wav', 'Pitches/D#5.wav',
'Pitches/D2.wav', 'Pitches/D3.wav', 'Pitches/D4.wav',
'Pitches/D5.wav', 'Pitches/Db1.wav', 'Pitches/Db2.wav',
'Pitches/Db3.wav', 'Pitches/Db4.wav', 'Pitches/E#2.wav',
'Pitches/E#3.wav', 'Pitches/E#4.wav', 'Pitches/E1.wav',
'Pitches/E2.wav', 'Pitches/E3.wav', 'Pitches/E4.wav',
'Pitches/E5.wav', 'Pitches/Eb2.wav', 'Pitches/Eb3.wav',
'Pitches/Eb4.wav', 'Pitches/F#1.wav', 'Pitches/F#2.wav',
'Pitches/F#3.wav', 'Pitches/F#4.wav', 'Pitches/F#5.wav',
'Pitches/F1.wav', 'Pitches/F2.wav', 'Pitches/F3.wav',
'Pitches/F4.wav', 'Pitches/F5.wav', 'Pitches/G#1.wav',
'Pitches/G#2.wav', 'Pitches/G#3.wav', 'Pitches/G#4.wav',
'Pitches/G#5.wav', 'Pitches/G1.wav', 'Pitches/G2.wav',
'Pitches/G3.wav', 'Pitches/G4.wav', 'Pitches/G5.wav',
'Pitches/Gb1.wav', 'Pitches/Gb2.wav', 'Pitches/Gb3.wav',
'Pitches/Gb4.wav']}},
executables = [Executable("Interval_trainer_v1_1.py", base=base)],
)
Output Image
感谢您的帮助。
请参阅 matplotlib
用户界面示例 embedding_in_tk and embedding_in_tk2 以练习构建 TkAgg
后端图形。