当我在 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()
在进行了一些进一步的调查并查看编译代码时 pyinstaller 的输出后,我发现了问题。由于某种原因编译时 matplotlib 没有被“收集”。我可以通过将
--collect-all *package*
添加到 pyinstaller 命令来解决此问题。
pyinstaller --collect-all matplotlib --onefile --windowed script.py
说明: