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

     2023-04-14     38

关键词:

【中文标题】如何在 Mac OS 上使用 Tkinter 获取黑色文件对话框?【英文标题】:How to get a black file dialog box using Tkinter on Mac OS? 【发布时间】:2019-08-24 07:04:54 【问题描述】:

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

Mojave (10.14.4) 暗模式 Python 3.6.8 Tcl/Tk 8.6.8

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

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

从其他地方打开时,Mojave 暗模式支持的黑色文件对话框:


如果有什么方法可以得到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()

【问题讨论】:

【参考方案1】:

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

第 1 步:首先你需要对那些官方不支持暗模式的应用强制使用暗模式。

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

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

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

     defaults write -g NSRequiresAquaSystemAppearance -bool No
    

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

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

如果您想恢复默认设置,只需使用以下命令删除NSRequiresAquaSystemAppearance 设置。

defaults delete -g NSRequiresAquaSystemAppearance

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

对于蟒蛇

如果您使用 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

结果

更新:

Anaconda 已将 Tcl/Tk 更新至 8.6.10 并添加了一个新命令,支持 macOS 的不同外观模式 (dark, light),这意味着更改任何模式都会更改背景颜色窗口和小部件也是如此,但它有点小故障。我们还必须通过foreground = 'black 才能看到Button 的文本以及其他一些小部件。

conda install -c conda-forge/label/cf202003 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 暗模式下运行良好,但由于在 Tk 8.6.9.1 中发现了一些回归,他们恢复了已发布的 python.org 3.7.2 macOS安装程序回到 Tcl/Tk 8.6.8。

示例图片

【讨论】:

tkmacosx 按钮在暗模式下工作【参考方案2】:

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

如果有帮助,我运行您的代码并得到以下结果:

虽然我使用的是 OSX 暗模式...

【讨论】:

当我运行我的代码时,我得到一个白色对话框,我也在使用 OSX 暗模式。你能解释一下你是怎么做对的吗? 我发现了问题,但不确定解决方案是什么。问题是我正在使用 python 3.6.7,它使用 tcl 8.6.8 和 tk 8.6.8,它不支持 macos 的暗模式,但如果你的 python 版本低于 3.6.5,那么它使用 tcl 8.5,它确实有效使用 Mojave 黑暗模式。感谢您的帮助,谢谢! 很确定我使用的是 3.7.2 我可能完全错了,但这是***.com/questions/52929744/…的帖子。

在 Mac OS 上设置 tkinter 图标

】在MacOS上设置tkinter图标【英文标题】:SettkintericononMacOS【发布时间】:2019-03-2011:15:37【问题描述】:我正在尝试更改出现在MacOS的tk应用程序上的图标。我上次检查此代码适用于Windows。目标是让此解决方案在所有平台上都能正... 查看详情

使用 Tkinter 和 Python 在 Mac OS X 中进行惯性滚动

】使用Tkinter和Python在MacOSX中进行惯性滚动【英文标题】:InertialscrollinginMacOSXwithTkinterandPython【发布时间】:2013-06-0411:04:10【问题描述】:我正在开发一个使用Tkinter作为窗口管理器的Python3.3项目。我为画布设置了鼠标滚轮事件。... 查看详情

如何在 Mac OS 上使用 ruby​​ 设置文件创建时间?

】如何在MacOS上使用ruby​​设置文件创建时间?【英文标题】:HowcanIsetafilecreationtimewithrubyonMacOS?【发布时间】:2012-01-1513:50:22【问题描述】:我正在尝试使用ruby​​脚本为MacOS上的文件设置文件系统创建时间。在MacOSX上,\'ctime\... 查看详情

Python,Tkinter:如何在可滚动画布上获取坐标

】Python,Tkinter:如何在可滚动画布上获取坐标【英文标题】:Python,Tkinter:Howtogetcoordinatesonscrollablecanvas【发布时间】:2012-07-0314:13:34【问题描述】:我有一个带有滚动条的Tkinter画布,还有一些项目,当我单击它们时,它应该返回... 查看详情

为啥我不能在 Mac 上使用 python 更改 tkinter 按钮的背景颜色?

】为啥我不能在Mac上使用python更改tkinter按钮的背景颜色?【英文标题】:whyIcan\'tchangebackgroundcolorofatkinterbuttonusingpythononaMac?为什么我不能在Mac上使用python更改tkinter按钮的背景颜色?【发布时间】:2022-01-1022:47:15【问题描述】:... 查看详情

如何在 Mac OS X 上使用 C++ 播放声音?

】如何在MacOSX上使用C++播放声音?【英文标题】:HowdoIplaysoundswithC++onMacOSX?【发布时间】:2012-05-2415:12:11【问题描述】:我正在更新一个20年前编写的C++程序,以运行涉及精确启动和停止声音的科学实验。程序还需要能够控制播... 查看详情

如何在 Mac OS Sierra 上使用 Python3.5 绝对安装 virtualenvwrapper?

】如何在MacOSSierra上使用Python3.5绝对安装virtualenvwrapper?【英文标题】:HowtodefinitelyinstallvirtualenvwrapperwithPython3.5onMacOSSierra?【发布时间】:2017-04-0513:42:45【问题描述】:好吧,看看这里有很多关于如何在Mac上正确安装virtualenvwrapper... 查看详情

如何使用自制软件在 Mac OS X 上安装 GTest?

】如何使用自制软件在MacOSX上安装GTest?【英文标题】:HowtoinstallGTestonMacOSXwithhomebrew?【发布时间】:2013-03-2823:20:26【问题描述】:我正在尝试使用我的数据包管理器HomeBrew安装gtest,但没有它的存储库。我试图从code.google下载gtest... 查看详情

在使用 Python 3 的 Mac 上没有名为“_tkinter”的模块

】在使用Python3的Mac上没有名为“_tkinter”的模块【英文标题】:Nomodulenamed\'_tkinter\'onMacusingPython3【发布时间】:2020-01-1903:46:55【问题描述】:我正在尝试使用Tkinter作为GUI将我的脚本捆绑到一个.app中,而进行捆绑的包装器是Platypu... 查看详情

如何使用 clang 在 Mac OS X 上获得新的 C++ 线程支持?

】如何使用clang在MacOSX上获得新的C++线程支持?【英文标题】:HowdoIgetthenewC++threadingsupportonMacOSXwithclang?【发布时间】:2013-01-0522:19:37【问题描述】:我只想在MacOSX10.8上使用Appleclang4.1(tags/Apple/clang-421.11.66)编译以下程序:#include<... 查看详情

如何在 Mac OS X 终端上使用 make 编译 C 程序

】如何在MacOSX终端上使用make编译C程序【英文标题】:HowtocompileaCprogramwithmakeonMacOSXTerminal【发布时间】:2014-12-1203:06:53【问题描述】:我最近买了一台MacbookPro,我想在终端上用C语言编写一些代码。我可以用这个命令编译代码:gc... 查看详情

如何在 Mac OS Sierra 10.12 上安装 Nokogiri

】如何在MacOSSierra10.12上安装Nokogiri【英文标题】:HowtoinstallNokogirionMacOSSierra10.12【发布时间】:2017-02-2315:17:48【问题描述】:我在MacOSSierra10.12上安装Nokogiri(1.6.8.1)时遇到问题。我尝试使用brewinstalllibxml2libxslt,然后使用命令行选项... 查看详情

如何使 Menu.add_command() 在 Mac 上的 tkinter 中工作?

】如何使Menu.add_command()在Mac上的tkinter中工作?【英文标题】:HowtomakeMenu.add_command()workintkinterontheMac?【发布时间】:2015-01-1220:58:41【问题描述】:如果我在OSX上创建一个tkinter菜单并尝试使用add_comand()向它添加一个菜单按钮,菜单... 查看详情

如何使用 React Native 连接到 Android TV 模拟器(在 Mac OS 上)?

】如何使用ReactNative连接到AndroidTV模拟器(在MacOS上)?【英文标题】:HowcanoneconnecttoanAndroidTVemulator(onMacOS)withReactNative?【发布时间】:2017-07-3104:27:44【问题描述】:我今天一直在玩ReactNative。我一直在使用AndroidEmulator在虚拟Android... 查看详情

如何在 Java 中为 Mac OS 获取 User ~/Library 路径

】如何在Java中为MacOS获取User~/Library路径【英文标题】:HowtogettheUser~/LibrarypathinJavafortheMacOS【发布时间】:2010-11-0822:02:02【问题描述】:在MacOS上,据我了解,如果每个人都可以阅读文件,您应该将信息存储在“/Library/ApplicationSupp... 查看详情

如何在 Jenkins 的 Mac OS slave 上使用 SonarQube Scanner 分析 Typescript 项目?

】如何在Jenkins的MacOSslave上使用SonarQubeScanner分析Typescript项目?【英文标题】:HowtoanalyzeTypescriptprojectwithSonarQubeScanneronJenkins\'MacOSslave?【发布时间】:2018-06-2101:16:17【问题描述】:我尝试在MacOS从站上使用SonarQubeScanner插件分析Jenkin... 查看详情

如何在 Mac OS 上使用 REALbasic 在 OpenOffice 中打开的 Word 文档中创建表格

】如何在MacOS上使用REALbasic在OpenOffice中打开的Word文档中创建表格【英文标题】:HowtocreatetableinWorddocumentopeninOpenOfficeusingREALbasiconMacOS【发布时间】:2013-05-1512:34:33【问题描述】:我用来创建二进制文件的代码:dimeFileasFolderItemdimou... 查看详情

如何在 Mac OS 上使用自制软件将 postgresql 从 10.1 降级到 9.6 [关闭]

】如何在MacOS上使用自制软件将postgresql从10.1降级到9.6[关闭]【英文标题】:Howtousehomebrewtodowngradepostgresqlfrom10.1to9.6onMacOS[closed]【发布时间】:2018-04-2721:38:44【问题描述】:我的mac上有postgresql10.1,我的工作网站需要9.6才能在本地... 查看详情