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

Saa*_*aad 3 python macos tkinter python-3.x kivy

我正在尝试实现黑色文件对话框(Mac OS 深色模式)。我正在使用 Tkinter 文件对话框模块 ( import tkinter.filedialog)。

  • Mojave (10.14.4) 暗模式
  • 蟒蛇 3.6.8
  • Tcl/Tk 8.6.8

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

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

#图片1

从别处打开时 Mojave 暗模式支持的黑色文件对话框:

#Image2


如果有什么办法可以用 获得黑色文件对话框Tkinter,请帮我我真的很想要黑色对话框。

样本.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()
Run Code Online (Sandbox Code Playgroud)

Saa*_*aad 5

可能会出现无法让您在 Tkinter GUI 上获得适当暗模式支持的问题。所有这些都在我的 Mac 上,它可能在每个系统中都不同。

步骤 1:首先,您需要对那些正式不支持暗模式的应用程序强制暗模式。

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

如果您对使用命令行没有信心,您可能不应该这样做。

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

     defaults write -g NSRequiresAquaSystemAppearance -bool No
    
    Run Code Online (Sandbox Code Playgroud)

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

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

如果要恢复为默认设置,只需NSRequiresAquaSystemAppearance使用以下命令删除设置即可。

 defaults write -g NSRequiresAquaSystemAppearance -bool No
Run Code Online (Sandbox Code Playgroud)

第 2 步:如何修复黑色的 Tkinter 窗口?

对于蟒蛇

如果您使用 Anaconda,那么您只需要执行 1st Step 即可在所有应用程序上获得暗模式,然后从命令行将 Tcl/Tk 更新到 8.6.9。(更多详情

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
Run Code Online (Sandbox Code Playgroud)

结果

更新:

Anaconda 已将 Tcl/Tk 更新至 8.6.10 并添加了一个支持 macOS 不同外观模式(深色、浅色)的新命令,这意味着更改任何模式都会更改窗口和小部件的背景颜色,但它是一个有点毛病。而且我们还必须通过foreground = 'black才能看到Button 在此处输入图片说明 以及其他一些小部件。

conda install -c conda-forge/label/cf202003 tk
Run Code Online (Sandbox Code Playgroud)

Python.org

解决第一个问题后,您将在 Tkinter 上获得暗模式,但如果您有 Tcl/Tk 8.6.8,则在 Tkinter 窗口上会出现黑屏。

示例图像

在此处输入图片说明

此问题已在 Tcl/Tk 8.6.9 中解决,但由于 python.org 尚未对其进行更新,并且还提供了他们自己的 Tcl/Tk 8.6.8 私有副本。他们不寻找或使用 Tcl/Tk 的任何第三方或系统副本(更多详细信息)。因此,如果您想从第三方安装它,那将是浪费时间。

我测试了内置 Tcl/Tk 8.6.9 的Python 3.7.2rc1,它在 Mojave 暗模式下运行良好,但由于在 Tk 8.6.9.1 中发现了一些回归,他们恢复了已发布的 python.org 3.7.2 macOS 安装程序到 Tcl/Tk 8.6.8。

示例图像