Python 3 中的主tkinter
模块及其子模块ttk
似乎包含相同的小部件(即Buttons
、CheckButtons
等)。
因此,在创建按钮时,可以自由使用tkinter.Button
小部件或tkinter.ttk.Button
.
你知道它们之间有什么区别吗?为什么你会选择其中之一?
The widgets in tkinter
are highly and easily configurable. You have almost complete control over how they look - border widths, fonts, images, colors, etc.
ttk
widgets use styles to define how they look, so it takes a bit more work if you want a non-standard button. ttk
widgets are also a little under-documented. Understanding the underlying theme and layout engines (layout within the widgets themselves, not pack
, grid
and place
) is a challenge.
Generally speaking, the themed widgets will give you an application that looks more "native", but at the expense of a loss of configurability.
My advice is to use ttk
widgets if you want your GUI to look a little more modern, and the tkinter widgets if you need a bit more configurability. You can use them both in the same applications.
对于刚开始学习的初学者,我的意见Tkinter
是使用Tkinter
小部件,因为它们真的很容易学习。但另一方面Tkinter.ttk
是一个旨在使Tkinter
小部件看起来非常完美的模块,但确实很难学习,而且那里没有简单的选择。就像没有-fg
, -bg
。也许,没有新样式可用Tkinter
。样式只为 设计ttk
,并且可以在 中找到ttk
。
而且Tkinter
小部件看起来确实不像其他原生平台小部件。
但是ttk
看起来更好更流畅,看起来像其他原生平台。
因此,如果您正在为自己的私人用途制作应用程序,请使用Tkinter
并ttk
在需要时使用一些,因为ttk
它支持更酷的小部件,可以改变您的应用程序的外观。
如果您正在制作供公众使用的应用程序,那么两者Tkinter
都需要,因为创建窗口和一些更重要的东西需要,而小部件则需要ttk
.
但老实说,我说两者都使用,因为两者之间没有冲突;只需将它们都用于您的优势。
老实说使用ttk
是一个挑战!因为它没有Grid
,Pack
和Place
许多其他通常在Tkinter
小部件中可用的选项。可是等等!!Tkinter
有这些选择!所以两者都用!尝试制作一个不错的应用程序!
这是两者之间的真正区别:Tkinter
小部件更易于配置,ttk
更现代,并且可以使用非常方便快捷的样式进行配置。Tkinter
就像窗户的核心一样,是ttk
造型。可以这样想:
Tkinter --- HTML,ttk --- CSS,Python --- JavaScript。
您可能想看看Converting existing applications to use the Tile widgets
另见:
如本文档所述:
最近,其他开源工具包,如 Qt(被 KDE 项目使用)和 GTK(被 GIMP 图形编辑软件和 Gnome 项目使用)作为 Motif 的强大且免费的替代品出现,用于 X-Window GUI 开发。GNU/Linux 等开源系统的迅速成功帮助这两个工具包吸引了大量的开发人员社区,两个社区之间的激烈(有时是友好的)竞争导致了新功能的爆炸式增长。对自由和可定制性的渴望创造了对主题性的需求。
Tk 的当前实现仅在支持的平台(Windows、X-Window、MacOS)上提供本机外观。这种缺乏在一定程度上解释了 Tk 失去思想份额的原因,尤其是在 Linux 开发人员中,主题支持被认为是“酷”或必须具备的功能。
虽然昨天许多 GUI 的目标是跨平台的视觉统一性(Qt 和 GTK 的大部分视觉外观都是从 Windows 中借来的,而 Windows 之前是从 NeXTStep 中借来的),但现在在今天的桌面上发现巨大的视觉差异是很常见的,即使在类似的系统上也是如此. 截屏比赛现在很常见。
...
许多 Tk 用户可能会将主题支持视为装饰性的,或者其重要性低于非常需要的功能,例如大型小部件或对象化。尽管如此,这对于 Tk 的长期生存能力来说是一个关键特性。许多课程现在都在推广 Qt、GTK 或(aarggg!) Swing 来代替 Motif,没有给 Tk 留下空间。无论其质量如何(跨平台、性能、易用性、国际化和 Unicode 支持),缺乏主题性将始终被视为不使用 Tk 的主要原因之一。使用 Tk 而不是 GTK 的应用程序在以像素图为主题的 Linux 桌面上,甚至在较新的 MacOS 和 Windows 版本上看起来像“外来”,因为 8.0 之前的应用程序在非 X 桌面上。
有一些小部件(总共 6 个)是 ttk 的一部分,而不是 tkinter。如上所述,缺少一些配置项,例如 fg 和 bg,但这可以通过样式来完成(在 tk 8.5 中引入)。
将两者结合使用,使用 tkinter.ttk 重载 tkinter 可为您提供两全其美的效果。
ttk 中的一些附加小部件非常有用(有 6 个在 tkinter 中找不到),例如我经常使用的 Notebook(选项卡式窗口)。
拉兹60p
Ttk可以更可定制,但正如其他人所说,它需要一些学习如何构建自定义样式等......但是,IMO 的外观明显优于标准 tkinter 小部件。
如果你想使用ttk但又想更好地控制颜色,你可以使用像ttkbootstrap这样的库,它有几十个主题和每个小部件的内置颜色样式。甚至还有一些用于仪表和日历等的非标准小部件......
这只是一个 GUI 窗口的设计问题。所以 Tkinter 是一个真正易于使用的高效实用的 GUI 工具包。但它看起来有点过时了。Tkinter Ttk 小部件类似于 Tkinter。它基本上是 Tkinter 的一个子模块。因此,在 Tkinter Ttk 中,几乎许多小部件都是相同的,但使用它们却不同。Tkinter Ttk 小部件更具可定制性,许多 Windows 程序都是使用 Tkinter 完成和设计的
from tkinter import ttk
import tkinter
root = tkinter.Tk()
style = ttk.Style()
style.theme_use("default")
ttk.Combobox().pack()
tkinter.Button(root, text="press me", height=10).pack()
ttk.Button(root, text="not me", padding=50).pack(pady=10, padx=10)
root.mainloop()
按查看 差异 Ttk 让您更好地控制设计(主题)