Текст кнопки tkinter не работает в мохаве

Это очень простая программа.

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

Я ожидаю, что эта программа покажет мне, как показано ниже.
work well

Но на самом деле это показывает картину ниже.
not work

Когда он изменяется в графическом интерфейсе, он работает хорошо.

Эта проблема не возникала в Хай-Сьерре.

Моя среда:

  • macOS Mojave 10.14
  • Python 3.7.0

Не могли бы вы мне посоветовать?

Я узнал такую же проблему на здесь.

Ответы

Ответ 1

Изменение внешнего вида на светлый режим устранило эту проблему для меня.

Чтобы изменить внешний вид, перейдите в "Настройки" → "Общие" → "Внешний вид" → "Легкий режим".

Dark Mode

Light Mode

Ответ 2

У меня также была эта проблема, 100% воспроизводимая на моем Mac после обновления до Mojave и при использовании Homebrew python3.

Переход на Python.org Загрузка пакета Python 3.7.1 полностью устранила проблему для меня.

Ответ 3

Я думаю, что есть ошибка в Tk. Я на MacOS 10.14.3 Если вы разверните и свернете окно tkinter, появится текст на кнопке, другое решение, которое мне помогло, это

from tkinter import *
from tkinter import ttk

button1 = ttk.Button(*your args here*)

Ответ 4

Вот пример, который исправляет проблему для меня (по крайней мере до тех пор, пока Python/Tkinter не будет очищен):

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()

Это было протестировано на macOS версии 10.14.2 (18C54) и Python 3.7.2 (загружено через Home-brew).

Ответ 5

У меня есть эта проблема с приложением, которое я написал, и застыл с PyInstaller. Он по-прежнему отлично работает на ПК и моем ноутбуке Mac, у которого нет Mojave, но на моем рабочем столе Mac, который недавно обновился до Mojave, у него есть кнопки без текста, а некоторые кнопки полностью невидимы, пока не нажмут.

Я нашел легкое решение для Reddit: просто слегка измените размер окна, и появятся элементы интерфейса!

Ссылка на Reddit thread

Ответ 6

У меня была точно такая же ошибка, и чтобы исправить ее, мне пришлось изменить кнопки на ttk.Button и установить стиль. Например, добавьте следующее для импорта:

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

А потом после root init:

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

Затем, когда вы создаете экземпляр Button:

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

Он работал отлично, чтобы гарантировать, что текст отображается правильно. До того, как я добавил бит ttk, я был в той же лодке, что и вы в Мохаве.

Ответ 7

У меня была эта проблема только при замораживании с использованием py2app. Мое исправление заключалось в использовании.update_idletasks() в виджетах, поскольку все элементы создаются для каждого кадра или верхнего уровня.

Ответ 8

Имел ту же проблему с текстом кнопки и выпадающим текстом после упаковки моей программы с помощью Pyinstaller. Я думаю, что это ошибка Tk/Tcl. Я смог зафиксировать его, введя полный экран (зеленая кнопка в сером полоске), а затем снова уменьшив до нормального размера (желтая кнопка в сером цвете).

Ответ 9

У меня была такая же точная проблема. У меня был темный режим в моих системных предпочтениях. Как только я вернулся к "нормальному" внешнему виду, текст для моих кнопок появился хорошо. В настоящее время у вас нет исправления проблемы, кроме, к сожалению, не использующего темный режим.

Ответ 10

Единственное жизнеспособное исправление, которое я нашел для окон pykapp Tkinter в Мохаве, состояло в том, чтобы обновить мою версию python до 2.7.15 (64-битная, а не 64/32-битная). Версии до этого все отображали пустой текст в замороженных двоичных файлах py2app. Непосредственно запущенный код Python отображается нормально. Вставка .update_idletasks() перед mainloop каждого окна не имела для меня никакого значения (протестировано на двух машинах Mojave).

Ответ 11

У меня была такая же проблема, но теперь я исправил ее.

Если вы используете Anaconda, введите следующие команды в терминале, и вы должны быть готовы пойти:

  1. conda update python
  2. conda update anaconda

Ответ 12

У меня получилось обновить python до 3.5.6 с 3.5.4.