Python - Tkinter不支持MacOS Mojave Dark Mode

11

我在使用Python Tkinter在MacOS上支持暗黑模式遇到了问题。我使用的是Python 3.6和ActiveTcl 8.5,暗黑模式可以正常工作,窗口标题栏也是暗色的,这对我来说非常好...但是在支持<MouseWheel>时出现了一些问题,所以我进行了升级,将Python版本更新到了3.7.1,同时tlc的版本更新到了8.6

但是现在暗黑模式不起作用了,这很奇怪,为什么会这样呢?

以下是示例代码:

from tkinter import *

if __name__ == '__main__':
    root = Tk()
    hero_text = Label(root, fg='white', bg='black', text='HERO TEXT')
    hero_text.grid(row=0, sticky=N+W)
    print(root.tk.exprstring('$tcl_library'))
    print(root.tk.exprstring('$tk_library'))
    root.mainloop()

3
你很幸运只是遇到了暗黑模式的问题,而在我的系统里,TK应用程序只会显示空白的黑色窗口。我建议你换成更现代化的工具包,比如GTK+ 3或Qt 4。 - Bachsau
2
@Bachsau 这个问题已经在8.6.9中得到了修复,根据tk开发人员的说法 https://core.tcl.tk/tk/tktview?name=821dbe47e1 - mister_potato
2
如果Mac上的某人想在Tkinter应用程序中使用Mojave暗模式,则此帖子可以提供帮助。https://dev59.com/_bLma4cB1Zd3GeqPjPmW - Saad
2
你可以通过安装最新版本的Python来解决这个问题。 - Andy Zhang
2个回答

1
我也遇到过这种问题,我认为你应该尝试这个。
from tkinter import *

if __name__ == '__main__':
       root = Tk()
       root.configure(bg="black")
       hero_text = Label(root, fg='white', bg='black', text='HERO TEXT')
       hero_text.grid(row=0, sticky=N+W)
       print(root.tk.exprstring('$tcl_library'))
       print(root.tk.exprstring('$tk_library'))
       root.mainloop()

3
目前您的回答写得不够清楚。请编辑并添加更多细节,以帮助其他人了解它如何回答所问的问题。您可以在帮助中心中找到有关如何编写好回答的更多信息。 - Community

0
使用基本的tkinter模块,没有办法自动化暗黑模式,除非使用像subprocess这样的其他模块。我建议您添加一个暗黑模式设置,但如果您仍然希望它自动化,这里是实现它的代码:
from tkinter import *
import subprocess

def check_appearance():
   cmd = 'defaults read -g AppleInterfaceStyle'
   p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE, shell=True)
   if bool(p.communicate()[0]):
      return "black"
   else:
      return "white"


win = Tk()
win.configure(bg=check_appearamce())

win.mainloop()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接