web-dev-qa-db-fra.com

le texte du bouton de tkinter ne fonctionne pas dans mojave

C'est un programme très simple.

import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()

Je pense que ce programme me montre une image ci-dessous.
work well

Mais cela montre une image ci-dessous réellement.
not work

Quand il est redimensionné sur l'interface graphique, il semble bien fonctionner.

Il n’est pas arrivé ce problème dans High Sierra.

Mon environnement est le suivant:

  • macOS Mojave 10.14
  • Python 3.7.0

Pourriez-vous me conseiller?

J'ai découvert le même problème sur ici .

6
Tiger

J'ai également eu ce problème, reproductible à 100% sur mon Mac après la mise à niveau vers Mojave et l'utilisation du python3 d'Homebrew.

Passer au téléchargement du package Python 3.7.1 de Python.org a totalement éliminé le problème.

4
Jon Garber

Voici un exemple qui corrige le problème pour moi (au moins jusqu'à ce que les éléments Python/Tkinter soient nettoyés):

import tkinter
root = tkinter.Tk()
tkinter.Button(root, text='button').pack()
def fix():
    a = root.winfo_geometry().split('+')[0]
    b = a.split('x')
    w = int(b[0])
    h = int(b[1])
    root.geometry('%dx%d' % (w+1,h+1))
root.update()
root.after(0, fix)
tkinter.mainloop()

Cela a été testé sur macOS Version 10.14.2 (18C54) et Python 3.7.2 (chargé via Home-brew).

2
Octetta

J'ai ce problème avec une application que j'ai écrite et figée avec PyInstaller. Il fonctionne toujours bien sur les PC et les ordinateurs portables Mac qui n’ont pas Mojave, mais sur mon ordinateur de bureau récemment mis à jour vers Mojave, il comporte des boutons sans texte et certains boutons sont complètement invisibles tant qu’ils ne sont pas cliqués. 

J'ai trouvé une solution facile sur Reddit: il suffit de redimensionner légèrement la fenêtre et les éléments de l'interface apparaissent!

Lien vers le fil Reddit

2
Geoffrey Sametz

Le seul correctif viable que j'ai trouvé pour les fenêtres py2app Tkinter dans Mojave était de mettre à jour ma version de python vers la version 2.7.15 (64 bits et non 64/32 bits). Les versions antérieures à cela affichaient toutes du texte vide dans les fichiers binaires figés py2app. Exécuter directement le code python affiché correctement. L'insertion de .update_idletasks() avant la boucle principale de chaque fenêtre ne m'a pas changé (testé sur deux machines Mojave). 

0
nateS

J'ai eu cette même erreur exacte, et pour le réparer, j'ai dû changer mes boutons en ttk.Button et définir un style. Par exemple, ajoutez ce qui suit pour importer:

try: from tkinter import ttk # python 3
except: import ttk # python 2.7

Et après la racine init:

    style = ttk.Style()
    style.map("C.TButton",
              foreground=[('pressed', 'red'), ('active', 'blue')],
              background=[('pressed', '!disabled', 'black'),
                          ('active', 'white')]
              )

Puis, lorsque vous instanciez le bouton:

self.button = ttk.Button(self, text="my cooool button",
                                 command=self.load_something_cool, style="C.TButton")

Cela a fonctionné parfaitement pour assurer que le texte est affiché correctement. Avant d’ajouter le bit ttk, j’étais dans le même bateau que vous à Mojave. 

0
jamescampbell

J'avais le même problème mais maintenant je l'ai corrigé. 

Si vous utilisez Anaconda, tapez les commandes suivantes dans le terminal et vous devriez être prêt à partir:

  1. conda update python
  2. conda update anaconda
0
Vaibhav Holani

J'ai eu ce problème uniquement lorsque congelé en utilisant py2app. Mon correctif consistait à utiliser .update_idletasks () sur le widget, une fois que tous les éléments ont été créés pour chaque image ou chaque niveau.

0
jazzaccord

Je suppose qu’il ya un bogue dans Tk . Je suis sous MacOS 10.14.3 Si vous agrandissez et réduisez au minimum la fenêtre de tkinter, le texte du bouton apparaît. 

from tkinter import *
from tkinter import ttk

button1 = tkk.Button(*your args here*)
0
Mayan Bhadage