让Tk看起来像一个本地的Linux应用程序

42
浏览TkDocs网站,看起来Tk在“原生外观”方面已经有了很大进步。但是看一些这些截图,似乎在Linux上表现不佳。如果你滚动页面,你会看到一个Mac截图,它看起来就像Mac,一个Windows XP截图,它看起来就像Windows XP,还有一个看起来像...好吧,Windows 98(或Windows XP的经典样式)的Linux截图。

我知道Linux没有真正的“原生外观”,因为每个工具包都有自己的样式。但是我想知道是否有办法使Tk看起来像GTK或Qt(最好是Gtk),这样它就可以与Linux桌面上的大多数其他应用程序融为一体。

那么Windows Vista / 7呢?我没有看到任何运行在这些平台上的Tk截图。

4个回答

21

Tk基本上有两组小部件,经典小部件和主题小部件。由于需要支持旧应用程序,因此经典小部件是默认设置,但新代码应该使用主题小部件。(它们不能被重载,因为它们的工作方式相当不同,并且有很多依赖于旧经典方式的代码存在。唉)通过正确的主题,主题小部件(通常称为Ttk)在Windows和OSX上看起来和行为与本地小部件一样。

有针对Gtk和Qt委托的部分Ttk主题可用(去年的这个演示文稿展示了它们的效果),但它们是部分的,其中很大一部分原因是那些工具包中使用的主题(Gtk/Qt主题,而不是Ttk主题;这很令人困惑!)质量较差。主要问题显然在于度量值的报告,这些度量值通常似乎是错误的(导致小部件大小错误或视觉元素放置不当);从与那篇论文作者的交谈中,我了解到一大部分主题只能与Gtk/Qt一起使用,但无法从个人经验中进行验证。(我在OSX上使用Ttk的直接本地支持。)


1
Linux 的 clearlooks 主题相当不错... clearlooks 主题 - Brad Lanam

13

对于现代 Linux 发行版的急性子用户:

echo '*TkTheme: clam' >> ~/.Xresources
xrdb -merge ~/.Xresources

然后重新启动基于Tk的应用程序。

以下是您可以期望的内容(显示的是git gui):

applied tk theme

左侧是在发出上述命令后启动的git gui。请注意,导航栏和按钮也已更改。


6

4

感谢您的提示和截图。奇怪的是,我在Python上尝试了那个样式的东西(ttk.Style().theme_names()),它生成了一个第二个窗口,其中定义了小部件。我看不出主题之间有任何区别--我认为这是因为窗口A是所有我的小部件所在的地方,而窗口B应用了主题。您有什么办法让Tkinterttk都引用同一个窗口吗? - mgiuca
我已经一年多没有使用Tkinter了,而且我不认为我曾经使用过ttk(只是后来听说过),但也许http://docs.python.org/dev/library/tkinter.ttk.html上的文档有一些提示。我知道python-list上有超过三个Tkinter专家,所以随时可以给他们发邮件(http://mail.python.org/mailman/listinfo/python-list)。 - Corey Richardson
谢谢。我没有立即找到任何东西,但我会仔细看看。 - mgiuca
希望他们能够添加对CSS的支持,这将通过(简单的)CSS的简化使tk中的小部件更加美观。 - shevy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接