Python中tkinter和tkinter.ttk的小部件有什么区别?

时间:2013-10-24 09:14:10

标签: python tkinter ttk

Python 3中的主tkinter模块及其子模块ttk似乎包含相同的小部件(即ButtonsCheckButtons等)。

因此,在创建按钮时,可以自由使用tkinter.Button小部件或tkinter.ttk.Button

你知道他们之间有什么区别吗?你为什么选择其中一个?

5 个答案:

答案 0 :(得分:44)

tkinter中的小部件高度且易于配置。您几乎可以完全控制它们的外观 - 边框宽度,字体,图像,颜色等。

ttk小部件使用样式来定义它们的外观,因此如果您需要非标准按钮,则需要更多工作。 ttk小部件也有点记录不足。理解底层主题和布局引擎(小部件本身内的布局,而不是packgridplace)是一项挑战。

一般来说,主题小部件将为您提供一个看起来更“原生”的应用程序,但代价是失去可配置性。

我的建议是使用ttk小部件,如果你希望你的GUI看起来更现代一些,那么tkinter小部件如果你需要更多的可配置性。您可以在相同的应用程序中使用它们。

答案 1 :(得分:2)

您可能需要查看Converting existing applications to use the Tile widgets

另见:

Tk Widget Styling Support

如本文件所述:

  

最近,其他开源工具包如Qt(由KDE使用)   项目)和GTK(由GIMP图形编辑软件和   Gnome项目)成为Motif for的强大且免费的替代品   X-Window GUI开发。开源迅速增长的成功   像GNU / Linux这样的系统帮助这两个工具包吸引了大量的工具   开发者社区和公司(有时是友好的)   两个社区之间的竞争导致了新的爆炸式增长   特征。对自由和可定制性的渴望创造了对它的需求   themeability。

     

Tk的当前实现仅提供原生外观和感觉   支持的平台(Windows,X-Window,MacOS)。这部分缺乏   解释了Tk失去了思想共享,特别是在Linux开发人员中,   主题支持被视为"酷"或必备功能。

     

虽然昨天许多GUI的目标是跨平台视觉   均匀性(Qt和GTK借鉴了他们的大部分视觉外观   Windows,早先从NeXTStep借来的),现在很常见   在今天的桌面上找到巨大的视觉差异,即使是类似的   系统。截图竞赛现在非常普遍。

     

...

     

许多Tk用户可能会将主题支持看作是装饰性的或更低级的   重要性比非常需要的功能,如megawidgets或   客观。然而,这是一个关键特征   为了Tk的长期生存能力而实施。现在有很多课程   促进Qt,GTK或(aarggg!)Swing代替Motif,不留   Tk的房间。无论其品质如何(跨平台,性能,易用性)   使用,国际化和Unicode支持),缺乏   可见性永远被视为不是主要原因之一   使用Tk。使用Tk而不是GTK的应用程序看起来像"外来的"   以pixmap为主题的Linux桌面,甚至是更新的MacOS和Windows   版本,因为8.0之前的应用程序在非X桌面上。

有一些小部件(总共6个)是ttk的一部分,而不是tkinter。 如上所述,有一些配置项缺失,如fg和bg, 但这可以用风格来完成(在tk 8.5中介绍)。

将两者结合使用,使用tkinter.ttk重载tkinter可以为您提供两全其美的效果。

ttk中的一些额外小部件非常有用(在tkinter中找不到6个小部件),比如经常使用的Notebook(选项卡式窗口)。

Larz60p

答案 2 :(得分:0)

我对初学者的看法是学习Tkinter,因为它真的很容易学习。手Tkinter.ttk上的Bu是一个模块,用于使Tkinter小部件真正完美,但确实很困难,并且那里没有简单的选择,只适合较难的选择。就像没有-fg-bg一样。也许,Tkinter中没有一种新样式。它仅适用于ttk,可以在ttk中找到。

Tkinter小部件确实看起来不像其他本机平台小部件。

但是ttk看起来更流畅,更漂亮,并且与其他nattive平台一样。

因此,如果您将应用设为私有供自己使用,请使用Tkinter,并在需要时使用一些ttk,因为ttk支持更多更酷的小部件,这些小部件可以改变您的外观应用程序。

如果您制作的应用程序是公开的,则同时使用这两种方法,因为创建窗口和一些更重要的内容需要Tkinter,对于小部件则选择ttk

但是说实话,我说两者都用,是因为这两者之间没有战斗,只是为了自己的利益而使用它们。

ttk确实是一个挑战!因为它没有GridPackPlace以及越来越多的重要内容。可是等等!! Tkinter拥有了!因此,请同时使用!尝试制作一个不错的应用程序!

它们之间的真正区别在于,Tkinter小部件可以根据需要进行配置,而ttk则更现代,并且可以使用样式来配置,这是非常方便的快捷方式。 Tkinter就像窗口的核心,ttk就是样式。像这样思考:

Tkinter --- HTML, ttk --- CSS, Python --- JavaScript。

希望这个答案对您有帮助!

答案 3 :(得分:0)

Ttk 可以更可定制,但正如其他人所说,需要学习如何构建自定义样式等......但是,IMO 的外观和感觉明显优于 IMO标准 tkinter 小部件。

如果您想使用 ttk 并且想要更多地控制颜色,您可以使用像 ttkbootstrap 这样的库,它有几十个主题并为每个小部件内置颜色样式。甚至还有一些用于仪表和日历等的非标准小部件......

答案 4 :(得分:0)

这只是 GUI 窗口的设计问题。所以 Tkinter 是一个非常易于使用的高效和有用的 GUI 工具包。但它看起来有点过时了。 Tkinter Ttk 小部件类似于 Tkinter 的小部件。它基本上是 Tkinter 的一个子模块。因此,在 Tkinter Ttk 中,几乎许多小部件都是相同的,但使用它们是不同的。 Tkinter Ttk 小部件更具可定制性,很多 windows 程序都是使用 Tkinter 完成和设计的