2016-04-17 6 views
1

verlassen werden. Ich verwende Python v3.5 und matplotlib v1.4.3 unter Windows 10 Home. Bis vor kurzem schreibe ich das Python-Skript mit matplotlib mit PyQt GUI. Der Code 'plt.show()' wird in ein anderes Modul geschrieben, nicht in __main__. Wenn ich diesen Code ausführe, kann Matplotlib figure nicht verschoben werden und mit dem roten Knopf X am oberen Rand der rechten Seite der Abbildung beenden. Seltsamerweise wird das Diagramm gezeigt und es funktioniert wirklich gut.Das Matplotlib-Plotfenster kann nicht verschoben und mit der roten X-Taste

Matplotlib Plot

Warum geschieht dieses Symptom? und wie kann ich es überarbeiten?

Antwort

0

Ich stolperte über ein ähnliches Problem. Das liegt daran, dass Ihre Matplotlib-Figur und Ihre PyQt-GUI beide im selben Hauptthread laufen. Da sie im Hauptthread sind, hat nur einer von ihnen die CPU für sich.

Ich habe versucht, das Problem zu lösen, indem ich entweder die PyQT GUI oder die Matplotlib in einen anderen Thread setzte. Aber das funktioniert nicht. Sowohl PyQT als auch Matplotlib müssen im Hauptthread ausgeführt werden.

Also hier ist ein Workaround. Sie können die matplotlib Figur aus einem neu erstellten Python-Shell starten:

import subprocess 
... 

    # When you click the button in your PyQT GUI, 
    # Create a new process: 
    myMatProcess = subprocess.Popen(['python', 'myGraph.py'], shell=True) 

Jetzt ist Ihre PyQT GUI und die matplotlib Figur Sie ihre eigenen Python-Interpreter Shell Zeichnung sind haben. Und sie können reibungslos laufen, ohne sich gegenseitig zu blockieren.

Wenn Sie weitere Fragen haben, zögern Sie nicht zu fragen. Ich würde mich freuen, dir zu helfen.

+0

Ich schätze wirklich Ihren Kommentar. Danke für Ihre Hilfe!! – Daniel

+0

Gern geschehen :-) –

+0

Muiler ~ !, Ich denke, mit 'Multiprocessing' Modul ist besser als 'Subprozess'. cuz 'Subprozess' ist eher schwierig, einen Kindprozess zu kommunizieren – Daniel