如何在 Mac OS 上使用 Tkinter 获取黑色文件对话框?
Posted
技术标签:
【中文标题】如何在 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
)。
当我从任何其他应用程序打开文件对话框时,它们具有黑色背景,但当我从 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 获取黑色文件对话框?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Tkinter 和 Python 在 Mac OS X 中进行惯性滚动