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.
Mais cela montre une image ci-dessous réellement.
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:
Pourriez-vous me conseiller?
J'ai découvert le même problème sur ici .
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.
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).
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!
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).
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.
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:
conda update python
conda update anaconda
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.
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*)