2017-08-30 18 views
0

Ich habe eine Anwendung erstellt, die nach dem Auswählen einiger Dateien und Klicken auf eine bestimmte Schaltfläche 3 bis 5 Plots mit Matplotlib generiert (und einige plotly verwendet). Für diese GUI habe ich Tkinter benutzt.Plot zeigt nur, wenn das Hauptfenster von Tkinter mit .exe

Wenn ich den .py-Code ausführen, funktioniert es perfekt, nach dem Drücken der Schaltfläche wird ein Diagramm angezeigt, nach dem Schließen des Fensters wird ein neues angezeigt und so weiter bis zum Ende.

Ich habe versucht, die .exe-Datei für diese Anwendung mit Py2exe und PyInstaller erstellen. Beide haben das selbe Verhalten: nach dem Drücken der Taste wird der erste Plot angezeigt, aber wenn ich das Fenster schließe, wird niemand angezeigt. Erst nach dem Schließen der erstellten Tkinter-Fenster (ein Hauptrahmen, der ein anderes Bild erzeugt, das die Schaltflächen enthält, auf die ich klicke, um das Plot anzuzeigen) erscheinen die anderen Plots (das zweite, dann nach dem Schließen des Fensters das dritte und so weiter).

Irgendwelche Hinweise dazu? Ich habe auch versucht

import matplotlib 

matplotlib.use('TkAgg') 

ohne Erfolg. TkAgg ist derjenige, der für die Erzeugung der .exe (musste es in der Matplotlibrc ändern) gearbeitet hat.

Der Code läuft folgendermaßen ab: main_app mit Tkinter-Funktionalitäten, second_app mit einigen nützlichen Funktionen und nur einer Tkinter-Nachricht (falls die Bedingungen erfüllt sind) und einer Reihe kleinerer .py-Dateien, die jeweils eine Funktion mit eigenen Berechnungen und Grundstücke.

Wenn eine Schaltfläche aus der main_app gedrückt wird, ruft sie eine bestimmte dieser kleineren .py-Dateien (Funktionen) zum Berechnen und Generieren der Plots auf.

Antwort

0

Ich lief auf das gleiche Problem. Ich benutzte Python 3.4 und PyInstaller 3.3, und ich würde versuchen, mehrere Plots gleichzeitig zu machen, aber nur einer würde zeigen, bis ich die ganze ausführbare Datei (mit PyInstaller --onefile Option) geschlossen habe. Ich löste das Problem, indem sie

plt.show(block=False) 

statt

plt.show() 

Verwendung beim Plotten. Das hat den Trick für mich gemacht, hoffe es hilft dir!

Verwandte Themen