Python:Tkinter/ttk主题消息框

Xes*_*esa 10 python tkinter tkmessagebox ttk

我开始使用Tkinter制作GUI,我也添加了模块tkMessageBox.但最近我发现导入模块ttk会提供更多"最新"结果:按钮和文本框会显示当前操作系统的实际样式.这是:Windows 10按钮是纯蓝色和蓝色,而不是以前版本的阴影灰色块状按钮.

但不幸的是,我找不到在常用的Dialog Boxes(我从tkMessageBox导入的那些)上使用这个ttk主题小部件的方法.因此,确定/取消对话框(例如)仍然显示不属于Windows 10的主题.

我检查的所有文档都将我带到了Tkinter.

pat*_*yts 9

Windows上的Tk消息框系统提供的消息框.Tk不使用Tk按钮和框架创建消息框,但显示Windows API提供的库存对话框.

为了检查你的报告,我运行了Tcl/Tk 8.6,Python 3.4和Powershell,并让每个人都显示了一个消息框.正如你所看到的那样,Tcl/Tk看起来正如我们所期望的那样,但Python和Powershell都默认为旧式的非主题外观和感觉.

Windows 10上的Tk消息框

这样做的原因很可能与启动它的可执行文件中的嵌入式清单有关.Tcl/Tk wish可执行文件包含一个清单资源,表明应用程序支持主题公共控件库.python.exe和pythonw.exe文件没有这样的资源.必要的清单嵌入在tkinter使用的Tk86.dll文件中,但我认为这需要与可执行文件相关联.我通过使用Visual Studio打开pythonw.exe文件并将现有的RT_MANIFEST资源替换为从Tk86.dll中提取的资源来测试此假设.使用合适的清单,Python tkinter消息框正确地为主题: Python 3.4使用嵌入式清单

据推测,这个清单可以作为XML文件提供在与可执行文件相同的文件夹中,但在测试时似乎不起作用.我必须将清单实际嵌入可执行资源中.

有关清单资源的更多信息,请参阅"启用视觉样式".