Ipython: Das Importieren von Pyplot führt zu einem Bouncing-Dock-Symbol auf dem Mac

Erstellt am 8. Jan. 2017  ·  10Kommentare  ·  Quelle: ipython/ipython

Dies wird durch das folgende GIF veranschaulicht:

image

Wenn Sie Pyplot in die normale Python-Repl importieren, wird das Python-Raketensymbol angezeigt, springt jedoch nicht ablenkend ab. Wenn Sie es in IPython importieren, springt das Symbol fast eine Minute lang nervig.

Hierbei wird ein Framework-Build von Python von Homebrew verwendet.

bug

Hilfreichster Kommentar

Ich habe nur 10 Sekunden gebraucht, um festzustellen, dass meine Maschine nicht eingefroren war, sondern dass der Zeiger, den ich betrachtete, der Zeiger in Ihrem GIF war.

Alle 10 Kommentare

Welches Backend benutzt du? Hilft es, plt.ion() oder %matplotlib auszuführen?

Mein Knie-Ruck / das, was ich mir ausgedacht habe, ist: Wenn IPython von der Readline entkoppelt wurde, entkoppelte es sich auch von der PyOS_InputHook -Maschinerie. Im einfachen Python-Fall startet die GUI (startet das Bouncing), der GUI-Code installiert den Hook und wenn er fertig ist, starten einige Telefone nach Hause, um die Rakete wissen zu lassen, dass sie das Bouncen beenden soll, da die GUI-Hauptschleife interkolonial mit läuft die repl. In IPython ist dieser Hook noch installiert, spielt jedoch keine Rolle, da IPython über das Toolkit für Eingabeaufforderungen ausgeführt wird. Wenn Sie die IPython-Ereignisschleifenintegration starten, ruft die GUI nach Hause und stoppt das Abprallen.

Oder ich könnte wild von der Basis abweichen.

Hierbei wird das Backend MacOSX . Die Verwendung von plt.ion() oder %matplotlib nach dem Import von pyplot stoppt das Bouncen nicht und die Verwendung von %matplotlib vor dem Pyplot-Import bewirkt lediglich, dass das Symbol mit dem Bouncen beginnt.

Passiert das mit dem tk-Backend?

Nein, überhaupt kein Raketensymbol mit TkAgg .

Ich werde bleiben, das mit # 9312 verbunden ist
Ich werde versuchen, es zu verstehen. Ping @minrk.

Ich werde sagen , dass diese :

    if not window_count:
        return

Muss entfernt werden, da die Eventloop-Integration ausgeführt werden muss, auch wenn keine Fenster vorhanden sind. Es scheint für mich zu funktionieren.
Eine Alternative wäre, sicherzustellen, dass inputhook(context) mindestens eine Schleife ausführt, auch wenn keine Fenster vorhanden sind.

    global at_least_once
    if not window_count and not at_least_once:
        at_least_once = True
        return

@ngoldbaum würde es Ihnen etwas
Ich nehme auch an, dass es aufhört zu hüpfen, sobald Sie Ihr erstes Fenster haben?

Die Bildschirmaufnahme macht mich auch glücklich, weil sie realistisch tippt und ich mich wegen meiner schrecklichen Eingabe weniger schuldig fühle.

In der Tat, das zu entfernen

if not window_count:
    return

Block behebt das Problem für mich. Und wie Sie vermutet haben, stoppt das Erstellen eines Plots das Abprallen.

Eingereicht # 10150, wartet auf die Überprüfung von qualifizierteren Personen.

Ich habe nur 10 Sekunden gebraucht, um festzustellen, dass meine Maschine nicht eingefroren war, sondern dass der Zeiger, den ich betrachtete, der Zeiger in Ihrem GIF war.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen