这是一个非常简单的程序。
import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()
我希望这个程序向我展示如下图所示。
但它实际上显示了下面的图片。
当它在 GUI 上调整大小时,它似乎运行良好。
在 High Sierra 中并没有出现这个问题。
我的环境如下:
- macOS 莫哈韦 10.14
- Python 3.7.0
你能给我建议吗?
我在这里发现了同样的问题。
这是一个非常简单的程序。
import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()
我希望这个程序向我展示如下图所示。
但它实际上显示了下面的图片。
当它在 GUI 上调整大小时,它似乎运行良好。
在 High Sierra 中并没有出现这个问题。
我的环境如下:
你能给我建议吗?
我在这里发现了同样的问题。
我猜Tk中有一个错误。我在 MacOS 10.14.3 如果您最大化和最小化 tkinter 窗口,按钮上的文本会出现,另一个对我有用的解决方案是
from tkinter import *
from tkinter import ttk
button1 = ttk.Button(*your args here*)
我遇到了同样的错误,为了修复它,我必须将按钮更改为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 位之前,我在莫哈韦和你在同一条船上。
我也遇到了这个问题,升级到 Mojave 和使用 Homebrew 的 python3 后,在我的 Mac 上 100% 可重现。
切换到 Python.org 的 Python 3.7.1 包下载完全消除了我的问题。
这是一个为我解决问题的示例(至少在 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 加载)上进行了测试。
我用 PyInstaller 编写并冻结的应用程序遇到了这个问题。它在没有 Mojave 的 PC 和我的 Mac 笔记本电脑上仍然可以正常工作,但在我最近更新到 Mojave 的桌面 Mac 上,它有没有文本的按钮,并且某些按钮在单击之前完全不可见。
我在 Reddit 上找到了一个简单的解决方案:只需稍微调整窗口大小,界面元素就会出现!
我只有在使用 py2app 冻结时才遇到这个问题。在为每个框架或顶层创建所有元素之后,我的解决方法是在小部件上使用 .update_idletasks()。
在使用 Pyinstaller 打包我的程序后,按钮文本和下拉文本也有同样的问题。我认为它是一个 Tk/Tcl 错误。我可以通过输入全屏(灰色条大声笑中的绿色按钮)然后再次最小化到正常大小(灰色条大声笑中的黄色按钮)来修复它。
对我来说,它可以将 python 从 3.5.4 更新到 3.5.6。
我为 Mojave 中的 py2app Tkinter 窗口找到的唯一可行修复是将我的 python 版本更新到 2.7.15(64 位而不是 64/32 位)。在此之前的版本都在 py2app 冻结的二进制文件中显示空文本。直接运行python代码显示正常。在每个窗口的主循环之前插入.update_idletasks()
对我来说没有什么不同(在两台 Mojave 机器上测试)。
我遇到了同样的问题,但现在我已经解决了。
如果您使用的是 Anaconda,请在终端中键入以下命令,您应该一切顺利:
conda update python
conda update anaconda