如何在Mac OS上使用Tkinter获得黑色文件对话框?

时间:2019-04-02 21:01:09

标签: python python-3.x macos tkinter kivy

我正在尝试建立一个黑色文件对话框(Mac OS暗模式)。我正在使用Tkinter文件对话框模块(import tkinter.filedialog)。

  • 莫哈韦沙漠(10.14.4)暗模式
  • Python 3.6.8
  • Tcl / Tk 8.6.8

当我从其他任何应用程序打开文件对话框时,它们的背景都是黑色的,但是当我从tkinter.filedailog打开文件对话框时,它们的背景是默认的白色。

这是Tkinter打开的文件对话框的图像:

#Image1

从其他位置打开的Mojave暗模式支持的黑色文件对话框:

#Image2


如果可以通过Tkinter获取黑色文件对话框,请帮助我,我真的想要黑色对话框。

sample.py

import tkinter.filedialog as _FD

_Master = _FD.Tk()
_Master.withdraw()

from kivy.core.window import Window as _kivy_window

class Open(_FD.Open):
    def __init__(self, multiple=False, **options): 
        if multiple: options["multiple"]=1
        super(Open, self).__init__(**options)

    def show(self, **options):
        s = super().show(**options)
        _kivy_window.raise_window()
        return s

if __name__ == "__main__":

    from kivy.app import App
    from kivy.uix.button import Button
    _kivy_window.size = (250, 250)

    class TestApp(App):
        def open(self, *a):
            s = Open(multiple=True)
            s = s.show()
            if s: print(s)

        def build(self):
            return Button(text='Hello World', on_release=self.open)

    TestApp().run()

2 个答案:

答案 0 :(得分:1)

我不是GUI开发人员,但是我很确定OSX不会让您更改诸如对话框窗口之类的实体的颜色...

如果有帮助,我运行了您的代码并获得了以下内容:

success

虽然我正在使用OSX暗模式...

答案 1 :(得分:1)

解决方案

可能的问题不会使您在Tkinter GUI上获得适当的Mojave Dark Mode支持。所有这些都在我的Mac上,在每个系统上可能都不同。

我正在使用MacOS Mojave 10.14.4版本

步骤1

默认情况下,暗模式并不适用于所有应用程序,例如第三方和不受信任的开发人员的某些应用程序。 我们仍然可以为那些应用程序实现“暗模式”,但是并不是每个应用程序都能正常运行,也许这就是为什么它不是设置中的选项的原因。

如果您对使用命令行不确定,则可能不应该这样做。

  1. 启用黑暗模式,然后在终端中运行此命令:

    defaults write -g NSRequiresAquaSystemAppearance -bool No
    

    注意:“是”表示禁用所有窗口,“否”表示启用所有窗口。

  2. 运行命令后注销并重新登录以注意更改。

还原为默认设置。

 defaults delete -g NSRequiresAquaSystemAppearance

步骤2

对于Anaconda

如果您使用Anaconda,则只需执行第一步即可在所有应用程序上获得黑暗模式,然后从命令行将Tcl / Tk更新为8.6.9。 (More Details

conda install -c conda-forge tk 
conda install -c conda-forge/label/gcc7 tk 
conda install -c conda-forge/label/broken tk 
conda install -c conda-forge/label/cf201901 tk

结果


Python.org

解决第一个问题后,如果您使用的是Tcl / Tk 8.6.8,则将在Tkinter上获得“暗模式”,但在tkinter窗口上获得黑屏。

示例图片

此问题已在Tcl / Tk 8.6.9中修复,但由于python.org尚未更新,还提供了自己的Tcl / Tk 8.6.8私有副本。他们不查找或使用Tcl / Tk(More Details)的任何第三方或系统副本。因此,如果您考虑从第三方安装它,我们将浪费时间。

我测试了Python 3.7.2rc1,它是在Tcl / Tk 8.6.9中构建的,并且可以在Mojave Dark Mode中很好地工作,但是由于在Tk 8.6.9.1中发现了一些回归,他们还原了发布的python.org 3.7.2 macOS安装程序返回到Tcl / Tk 8.6.8。

示例图片