绘图无法在已编译的Python应用程序中打开

问题描述 投票:0回答:1

当我在 macOS Ventura 14.3 上使用

pyinstaller --windowed --onefile script.py
捆绑我的 Tkinter 应用程序时,包含根据用户输入生成的 matplotlib 图的窗口不会打开。 Tkinter 主窗口显示正常,但绘图无法打开。这只发生在 macOS 上;在 Windows 上,绘图窗口正常打开。是否需要使用特定的 macOS 设置、PyInstaller 参数或 python 代码来正确显示绘图窗口?

编辑:根据要求,这里是一些示例代码。当使用 pyinstaller 编译它并单击“生成绘图”按钮时,绘图将打开。

import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("test window")

x_data_var = tk.StringVar()
y_data_var = tk.StringVar()

def create_plot():
    x_data_str = x_data_var.get()
    y_data_str = y_data_var.get()

    x_data = [float(i) for i in x_data_str.split(',')]
    y_data = [float(i) for i in y_data_str.split(',')]

    plt.plot(x_data, y_data)
    plt.show()

ttk.Label(root, text='X Data: ').grid(row=0, column=0, padx=5, pady=5)
ttk.Label(root, text='Y Data: ').grid(row=1, column=0, padx=5, pady=5)

ttk.Entry(root, textvariable=x_data_var).grid(row=0, column=1, padx=5, pady=5)
ttk.Entry(root, textvariable=y_data_var).grid(row=1, column=1, padx=5, pady=5)

ttk.Button(root, text="Create Plot", command=create_plot).grid(row=2, column=0, columnspan=2, padx=5, pady=5)

root.mainloop()
python macos matplotlib tkinter pyinstaller
1个回答
0
投票

在进行了一些进一步的调查并查看编译代码时 pyinstaller 的输出后,我发现了问题。由于某种原因编译时 matplotlib 没有被“收集”。我可以通过将

--collect-all *package*
添加到 pyinstaller 命令来解决此问题。

pyinstaller --collect-all matplotlib --onefile --windowed script.py

说明:

  • --collect-all package_name:指示 PyInstaller 收集指定包中的所有文件
  • --onefile:创建单个可执行文件
  • --windowed:指定应用程序有图形界面
  • script.py:脚本名称
© www.soinside.com 2019 - 2024. All rights reserved.