[英]Button text of tkinter does not work in mojave
這是一個非常簡單的程序。
import tkinter
tkinter.Button(None, text='button').pack()
tkinter.mainloop()
我希望這個節目能讓我看到如下圖。
但它實際上顯示了下面的圖片。
當它在GUI上調整大小時似乎運行良好。
在High Sierra沒有出現這個問題。
我的環境如下:
你能告訴我一下嗎?
我在這里發現了同樣的問題。
我也有這個問題,在升級到Mojave和使用Homebrew的python3后,我的Mac上100%可重現。
切換到Python.org的Python 3.7.1包下載完全消除了我的問題。
我想Tk中有一個錯誤。 我在MacOS 10.14.3上如果你最大化和最小化tkinter窗口按鈕上的文字出現,另一個對我有用的解決方案是
from tkinter import *
from tkinter import ttk
button1 = ttk.Button(*your args here*)
我用我編寫的應用程序和PyInstaller凍結了這個問題。 它仍然適用於沒有Mojave的PC和我的Mac筆記本電腦,但在最近更新為Mojave的桌面Mac上,它有沒有文字的按鈕,有些按鈕在點擊之前完全不可見。
我在Reddit上找到了一個簡單的解決方案:只需稍微調整窗口大小,就會出現界面元素!
這是一個為我修補問題的例子(至少在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加載)上測試的。
我有同樣的錯誤,為了解決它我必須將我的按鈕更改為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位之前,我和你在莫哈韋的同一艘船。
我只有在使用py2app凍結時才遇到這個問題。 我的修復是在為每個框架或Toplevel創建所有元素之后在窗口小部件上使用.update_idletasks()。
在使用Pyinstaller打包程序后,按鈕文本和下拉文本出現了同樣的問題。 我認為這是一個Tk / Tcl錯誤。 我能夠通過進入全屏(灰色條中的綠色按鈕lol)然后再次最小化到正常尺寸(灰色條中的黃色按鈕lol)來修復它。
我在Mojave中找到的py2app Tkinter窗口唯一可行的修復方法是將我的python版本更新為2.7.15(64位不是64 / 32bit)。 之前的版本都在py2app凍結的二進制文件中顯示空文本。 直接運行python代碼顯示正常。 在每個窗口的主循環之前插入.update_idletasks()
對我沒有任何影響(在兩台Mojave機器上測試)。
我有同樣的問題,但現在我已經解決了。
如果您使用的是Anaconda,請在終端中鍵入以下命令,您應該很高興:
conda update python
conda update anaconda
對我來說,它從3.5.4更新python到3.5.6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.