簡體   English   中英

如何在 Mac OS 上使用 Tkinter 獲取黑色文件對話框?

[英]How to get a black file dialog box using Tkinter on Mac OS?

我正在嘗試實現黑色文件對話框(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()

可能會出現無法讓您在 Tkinter GUI 上獲得適當暗模式支持的問題。 所有這些都在我的 Mac 上,每個系統可能會有所不同。

步驟 1:首先,您需要對那些正式不支持暗模式的應用程序強制暗模式。

默認情況下,暗模式並不適用於所有應用程序,例如某些第三方應用程序和不受信任的開發人員的應用程序。 我們仍然可以為這些應用程序實現暗模式,但並非每個應用程序都能正常工作,這也許就是為什么它不是設置中的一個選項。

如果您對使用命令行沒有信心,您可能不應該這樣做。

  1. 啟用暗模式,然后在終端中運行此命令:

     defaults write -g NSRequiresAquaSystemAppearance -bool No

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

  2. 運行命令后注銷並重新登錄以注意更改。

如果您想恢復為默認設置,只需使用以下命令刪除NSRequiresAquaSystemAppearance設置。

defaults delete -g NSRequiresAquaSystemAppearance

第 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

結果

更新:

Anaconda 已將 Tcl/Tk 更新至 8.6.10 並添加了一個支持 macOS 不同外觀模式(深色、淺色)的新命令,這意味着更改任何模式都會更改窗口和小部件的背景顏色,但它是一個有點毛病。 而且我們還必須通過foreground = 'black來查看Button的文本在此處輸入圖片說明 以及其他一些小部件。

conda install -c conda-forge/label/cf202003 tk

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。

示例圖像

我不是 GUI 開發人員,但我很確定 OSX 不會讓您更改對話框窗口等實體的顏色...

如果有幫助,我運行您的代碼並得到以下內容:

成功

不過我正在使用 OSX 暗模式...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM