pyinstaller не будет работать с tkinter и matplotlib - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть anaconda, python 3. Я запустил cmd.exe из Anaconda и запустил код: pyinstaller --onefile guitest4.py. Сообщается о множестве ошибок, exe создается, exe запускает окно cmd и сразу закрывается. Компилирование кода в exe, код, содержащий tkinter, работает нормально. Однако всякий раз, когда я включаю matplotlib, возникают проблемы. Есть идеи? Спасибо!

Вывод: ЗДЕСЬ

Если я добавлю опцию -w в pyinstaller, я получу ошибку из image

Код:

from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure

import numpy as np


root = tkinter.Tk()
root.wm_title("Embedding in Tk")

fig = Figure(figsize=(5, 4), dpi=100)
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)


def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)


canvas.mpl_connect("key_press_event", on_key_press)


def _quit():
    root.quit()     # stops mainloop
    root.destroy()  # this is necessary on Windows to prevent
                    # Fatal Python Error: PyEval_RestoreThread: NULL tstate


button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

tkinter.mainloop()
# If you put root.destroy() here, it will cause an error if the window is
# closed with the window manager.

1 Ответ

0 голосов
/ 17 апреля 2020

Проблема решена с помощью auto py для exe gui. Что он делает помимо того, что я делал с pyinstaller, я не знаю, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...