tkinter的按钮文本在莫哈韦沙漠中不起作用

时间:2018-09-27 04:21:14

标签: python python-3.x tkinter macos-mojave

这是一个非常简单的程序。

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

我希望这个程序可以显示如下图所示。
work well

但实际上显示的是下面的图片。
not work

在GUI上调整大小时,效果似乎很好。

在High Sierra中没有发生此问题。

我的环境如下:

  • macOS Mojave 10.14
  • Python 3.7.0

你能给我建议吗?

我在here上发现了同样的问题。

11 个答案:

答案 0 :(得分:4)

我也有这个问题,升级到Mojave后和使用Homebrew的python3时,在Mac上可100%再现。

切换到Python.org的Python 3.7.1软件包下载对我来说完全解决了这个问题。

答案 1 :(得分:3)

我想Tk中有错误。 我在MacOS 10.14.3上 如果您最大化或最小化tkinter窗口,则会显示按钮上的文字, 另一个对我有用的解决方案是

from tkinter import *
from tkinter import ttk

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

答案 2 :(得分:3)

将外观更改为灯光模式对我来说已经解决了这个问题。

要更改外观,请转到设置->常规->外观->灯光模式。

Dark Mode

Light Mode

答案 3 :(得分:2)

我在编写并使用PyInstaller冻结的应用程序时遇到了这个问题。在没有Mojave的PC和Mac笔记本电脑上,它仍然可以正常工作,但是在最近更新为Mojave的台式机Mac上,它具有没有文本的按钮,并且某些按钮在单击之前是完全不可见的。

我在Reddit上找到了一个简单的解决方案:只需稍微调整窗口大小,然后出现界面元素!

Link to Reddit thread

答案 4 :(得分:2)

这是一个为我解决问题的示例(至少在清理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 :(得分:0)

仅在使用py2app冻结时才出现此问题。我的解决方法是在为每个框架或顶层创建所有元素之后,在小部件上使用.update_idletasks()。

答案 6 :(得分:0)

我在Mojave中为py2app Tkinter窗口找到的唯一可行修复是将python版本更新为2.7.15(64位而非64/32位)。在此之前的所有版本在py2app冻结的二进制文件中均显示空文本。直接运行python代码可以正常显示。在每个窗口的主循环之前插入.update_idletasks()对我来说没有什么不同(在两台Mojave机器上进行了测试)。

答案 7 :(得分:0)

我遇到了同样的问题,但是现在我已经解决了。

如果您正在使用Anaconda,请在终端中键入以下命令,您应该会很好:

  1. conda update python
  2. conda update anaconda

答案 8 :(得分:0)

我也有同样的错误,并且要修复此错误,必须将按钮更改为ttk.Button并设置样式。例如,添加以下内容以导入:

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

然后在root初始化之后:

    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之前,我和您在莫哈韦沙漠(Mojave)处于同一条船上。

答案 9 :(得分:0)

对我来说,它可以将python从3.5.4更新到3.5.6。

答案 10 :(得分:-1)

使用Pyinstaller打包程序后,按钮文本和下拉文本也存在相同的问题。我认为这是Tk / Tcl错误。我能够通过输入全屏(灰色条大声笑的绿色按钮),然后再次最小化到正常大小(灰色条大声笑的黄色按钮)来修复它。