Ipython: L'importation de pyplot provoque le rebond de l'icône du dock sur Mac

Créé le 8 janv. 2017  ·  10Commentaires  ·  Source: ipython/ipython

Ceci est illustré par le gif suivant:

image

L'importation de pyplot dans le repl python normal fait apparaître l'icône de la fusée python mais ne rebondit pas de manière distrayante. L'importer dans IPython fait rebondir l'icône de manière ennuyeuse pendant près d'une minute.

Cela utilise une version de framework de Python de Homebrew.

bug

Commentaire le plus utile

Il m'a juste fallu 10 secondes pour réaliser que ma machine n'était pas figée mais que le pointeur que je regardais était le pointeur de votre .gif.

Tous les 10 commentaires

quel backend utilisez-vous? Est-ce que l'exécution de plt.ion() ou %matplotlib aide?

Mon réflexe / inventer cela, comme je suppose, c'est que lorsque IPython s'est déconnecté de readline, il s'est également découplé de la machine PyOS_InputHook . Dans le cas simple de python, l'interface graphique démarre (commence le rebond), le code GUI installe le hook, et quand il a fini de démarrer un peu comment les téléphones à la maison pour faire savoir à la fusée d'arrêter de rebondir car la boucle principale de l'interface graphique fonctionne intercolée avec le repl. Dans IPython, ce hook est toujours installé, mais n'a pas d'importance car IPython s'exécute via une boîte à outils d'invite. Si vous démarrez l'intégration de la boucle d'événements IPython, l'interface graphique téléphonera à la maison et arrêtera le rebond.

Ou je pourrais être complètement hors de la base.

Cela utilise le backend MacOSX . L'utilisation de plt.ion() ou %matplotlib après l'importation de pyplot n'arrête pas le rebond et l'utilisation de %matplotlib avant de faire l'importation pyplot fait que l'icône commence à rebondir.

Cela se produit-il avec le backend tk?

Non, pas d'icône de fusée du tout avec TkAgg .

Je vais rester lié à # 9312
Je vais essayer de le comprendre. Ping @minrk.

Je vais dire que ceci :

    if not window_count:
        return

Doit être supprimé car l'intégration eventloop doit s'exécuter même s'il n'y a pas de fenêtres ... cela semble fonctionner pour moi.
Une alternative serait de s'assurer que inputhook(context) fait au moins une boucle même si aucune fenêtre ... ainsi de suite:

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

@ngoldbaum vous dérangerait-il d'essayer?
Aussi je suppose qu'il arrête de rebondir dès que vous avez votre première fenêtre?

L'enregistrement d'écran me rend également heureux car il est réaliste dans sa frappe et me fait me sentir moins coupable de ma frappe horrible.

En effet, en supprimant cela

if not window_count:
    return

block résout le problème pour moi. Et comme vous vous en doutiez, créer un complot arrête le rebond.

Soumis # 10150, attendra l'examen de personnes plus qualifiées.

Il m'a juste fallu 10 secondes pour réaliser que ma machine n'était pas figée mais que le pointeur que je regardais était le pointeur de votre .gif.

Cette page vous a été utile?
0 / 5 - 0 notes