web-dev-qa-db-fra.com

Les boutons `tkinter._test ()` sont invisibles lors de l'utilisation de pipenv

J'apprends Tkinter en ce moment et j'essaie de résoudre mon premier problème, mais trouver Google n'a pas été utile.

J'exécute ce code sur Mac OS X 10.15.1 (Catalina)

J'utilise Python 3.7 et mon code ressemble à ça (beaucoup de passe-partout selon les normes PEP8):

"""
Experiments in tkinter
"""


import tkinter as tk


def main():
    """
    Main entrypoint
    """

    tk._test()


if __name__ == "__main__":
    main()

Cela envoie l'avertissement suivant à la console:

AVERTISSEMENT DE DÉPRÉCIATION: la version système de Tk est obsolète et pourra être supprimée dans une prochaine version. S'il vous plaît, ne vous y fiez pas. Définissez TK_SILENCE_DEPRECATION = 1 pour supprimer cet avertissement.

Il affiche également une fenêtre avec des boutons complètement vides:

Output of <code>tkinter._test()</code>

D'après ma compréhension, ces boutons devraient dire "Cliquez sur moi" et "Quitter".

De plus, lorsque je clique sur le bouton du haut, il clignote en noir pendant une seconde comme ceci:

Result of clicking on first button

Après quoi le bouton est plus large qu'auparavant:

Clicking twiceClicking ten times

Je suppose que l'erreur de version Tk peut être liée au comportement de sortie. Cependant, je n'arrive pas à trouver un moyen de mettre à jour Tk. Que dois-je faire ici?

Mettre à jour

Après avoir vu la réponse de @ ShayneLoyd (suggérant que j'avais besoin d'une version mise à jour de Python avec une version mise à jour de Tk), j'ai commencé à en chercher plus et j'ai trouvé cet article sur le Apple Forums de discussion qui suggère que vous pouvez utiliser homebrew pour installer une version de Python quel lien homebrew a installé la propre version de Tk. J'ai essayé cela et cela a échoué, donc j'ai Google a résolu le problème et a trouvé ce message StackOverflow qui semblait suggérer que je peux installer ActiveTcl et cela fonctionnera.

J'ai installé ActiveTcl d'ActiveState et suis retourné à mon projet. Au début, je l'ai couru comme ceci:

$> cd ~/Source/experiments/python/tkinter
$> ./test.py

En fait a fonctionné! J'ai pu lire les boutons et cela s'est comporté comme il se doit. Puis j'ai réalisé que je n'utilisais pas pipenv, j'ai donc fait un test rapide:

$> pipenv run ./test.py

Maintenant, j'étais de retour à l'état d'échec. J'ai mis à jour mon script pour afficher la version Tcl et Tk et bien sûr quand j'ai utilisé pipenv, il chargeait Tcl/Tk 8.5.9 mais quand je n'ai pas utilisé pipenv, il chargeait 8.6.9

Alors, comment puis-je réparer pipenv maintenant?

3
stevendesu

Après quelques heures à jouer avec, je l'ai compris!

Le Pipfile contenait une référence à Python version 3.7

Donc pipenv install cherchait sur ma machine une version 3.7 de Python installé. La version trouvée était celle de Homebrew, qui a Tk 8.5.9 lié statiquement.

En mettant à jour le Pipfile pour exiger Python 3.8 ma machine a commencé à extraire mon système Python, qui utilise le Tk lié dynamiquement, que j'avais mis à jour avec succès vers 8.6.9

1
stevendesu

Pour tous ceux qui ont le même problème et doivent s'en tenir à sa Python, vous pouvez facilement contourner le problème "ne pas afficher le texte sur les boutons" en changeant le thème MacOs. Préférences Système> Général> Mode d'éclairage .

Vous devez avoir à l'esprit que vous pouvez rencontrer d'autres problèmes.

1
Alesof