20

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

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

我希望这个程序向我展示如下图所示。
运作良好

但它实际上显示了下面的图片。
不行

当它在 GUI 上调整大小时,它似乎运行良好。

在 High Sierra 中并没有出现这个问题。

我的环境如下:

  • macOS 莫哈韦 10.14
  • Python 3.7.0

你能给我建议吗?

我在这里发现了同样的问题。

4

11 回答 11

17

将外观更改为灯光模式为我解决了这个问题。

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

黑暗模式

灯光模式

于 2019-03-23T15:08:33.493 回答
15

我猜Tk中有一个错误。我在 MacOS 10.14.3 如果您最大化和最小化 tkinter 窗口,按钮上的文本会出现,另一个对我有用的解决方案是

from tkinter import *
from tkinter import ttk

button1 = ttk.Button(*your args here*)
于 2019-02-13T02:29:59.920 回答
8

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

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

然后在根初始化之后:

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

然后当您实例化按钮时:

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

它完美地确保了文本正确显示。在我添加 ttk 位之前,我在莫哈韦和你在同一条船上。

于 2019-02-24T05:42:15.923 回答
6

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

切换到 Python.org 的 Python 3.7.1 包下载完全消除了我的问题。

于 2018-10-24T18:22:39.777 回答
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 加载)上进行了测试。

于 2019-01-27T22:27:14.440 回答
2

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

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

链接到 Reddit 线程

于 2018-11-01T14:27:28.590 回答
0

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

于 2018-10-09T12:39:06.487 回答
0

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

于 2018-10-24T02:54:05.017 回答
0

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

于 2019-03-07T16:56:04.583 回答
0

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

于 2018-12-13T02:55:28.237 回答
0

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

如果您使用的是 Anaconda,请在终端中键入以下命令,您应该一切顺利:

  1. conda update python
  2. conda update anaconda
于 2019-01-17T03:29:26.087 回答