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

问题描述 投票:11回答:11

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

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

我希望这个节目能让我看到如下图。

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

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

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

我的环境如下:

  • macOS Mojave 10.14
  • Python 3.7.0

你能告诉我一下吗?

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

python python-3.x tkinter macos-mojave
11个回答
5
投票

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

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


0
投票

我有同样的错误,为了解决这个问题,我不得不将我的按钮更改为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位之前,我和你在莫哈韦的同一艘船。


0
投票

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


4
投票

将外观更改为Light Mode可以解决此问题。

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

Dark Mode

Light Mode


4
投票

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

from tkinter import *
from tkinter import ttk

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

2
投票

我用我编写的应用程序和PyInstaller冻结了这个问题。它仍然适用于没有Mojave的PC和我的Mac笔记本电脑,但在最近更新为Mojave的桌面Mac上,它有没有文字的按钮,有些按钮在点击之前完全不可见。

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

Link to Reddit thread


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加载)上测试的。


0
投票

我只有在使用py2app冻结时才遇到这个问题。我的修复是在为每个框架或Toplevel创建所有元素之后在窗口小部件上使用.update_idletasks()。


0
投票

在使用Pyinstaller打包程序后,按钮文本和下拉文本出现了同样的问题。我认为这是一个Tk / Tcl错误。我能够通过进入全屏(灰色条中的绿色按钮lol)然后再次最小化到正常尺寸(灰色条中的黄色按钮lol)来修复它。


0
投票

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


0
投票

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

如果您使用的是Anaconda,请在终端中键入以下命令,您应该很高兴:

  1. conda update python
  2. conda update anaconda
© www.soinside.com 2019 - 2024. All rights reserved.