这是一个非常简单的程序。
import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()
我希望这个程序可以显示如下图所示。
但实际上显示的是下面的图片。
在GUI上调整大小时,效果似乎很好。
在High Sierra中没有发生此问题。
我的环境如下:
你能给我建议吗?
我在here上发现了同样的问题。
答案 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)
答案 3 :(得分:2)
我在编写并使用PyInstaller冻结的应用程序时遇到了这个问题。在没有Mojave的PC和Mac笔记本电脑上,它仍然可以正常工作,但是在最近更新为Mojave的台式机Mac上,它具有没有文本的按钮,并且某些按钮在单击之前是完全不可见的。
我在Reddit上找到了一个简单的解决方案:只需稍微调整窗口大小,然后出现界面元素!
答案 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,请在终端中键入以下命令,您应该会很好:
conda update python
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错误。我能够通过输入全屏(灰色条大声笑的绿色按钮),然后再次最小化到正常大小(灰色条大声笑的黄色按钮)来修复它。