为什么Tk GUI被认为是丑陋的?

34
Tk GUI似乎被普遍认为很丑,但我想知道具体原因。 Tcl / Tk界的一些人会认为这是一个无关紧要的问题,因为现在有更好的本地外观和感觉支持,这也是我决定使用Tcl / Tk的主要原因。 现在,由于我正在利用Tcl / Starkit虚拟文件系统(vfs),所以本地文件对话框不起作用,我将不得不恢复到纯Tk文件对话框。
请提供具体的技术原因,例如字体平滑处理(或缺乏此类处理)或字体样式、颜色等。 因为我个人不相信“我只是觉得它很丑”。 对我来说,它只是不同的,我经常在Mac、Windows和Linux之间切换,所以我习惯了不同的外观/感觉。
具体而言,传统Tk GUI的motif-ish外观被认为很丑:

Tcl/Tk GUI Sample


30
现在我明白他们为什么说“一张图片胜过千言万语”了 :) - OscarRyz
对我来说,许多Tk程序中最明显的特定故障是厚重的菜单栏。 - Mechanical snail
5
这是一个在KDE环境下运行的Tk应用程序(Gitk)、Qt应用程序(KWrite)和GTK+应用程序(Leafpad)的截图。 - Mechanical snail
这个屏幕截图看起来完全像一个Win16应用程序,尽管它是一个Win32应用程序。 - linquize
到目前为止,评论所得出的结论是:突出的菜单栏,不与Windows的不一致的主题相一致,以及“看起来像16位应用程序”,不管那意味着什么。并不太令人信服... - Darren Ringer
显示剩余3条评论
8个回答

55
我认为部分原因是Tk非常强大且易于使用,但它不会做太多的手把手指导。由于它非常容易上手,没有UI设计经验的人可以在很短的时间内得到一些工作成果。但是,缺乏经验的人依赖默认设置和最短路径解决方案(即:不花时间隐藏不需要的滚动条,不使用常见的工具栏惯例,不正确地对齐小部件等)。
不幸的是,Tk的默认设置并不总是最美观的。正如问题中的截图所示,其默认使用相对较厚的边框宽度和次优的字体,复选框确实直接从80年代出来的。然而,在专家的手中,所有这些问题都是可以在空闲时间内轻松解决的小问题。
例如,通过五分钟的调整,原始截图可以看起来像这样:

slightly improved ui

当然,这看起来仍然有些笨拙,但可以说它比原始版本好了很多。如果花一个小时专注于此任务,还可以进行更多改进。
使用tk 8.5(实际上在几年前就开始支持),支持主题和本地小部件,即使是X11版本也会得到一次轻微的升级。然而,Tk在视觉效果方面仍然落后于曲线,如果设计需要渐变、动画等等,就必须“自己动手”。
然而,Tcl和Tk对于大多数类型的应用程序仍然是一个不错的实用解决方案。如果你想与Flash应用程序竞争,你会输掉的。但是,如果你有一个工业应用程序,只需要工作并且可用,可能是跨平台的,Tk仍然是最好的选择之一。

截至2015年,有一篇关于现代化Tkinter的IDLE IDE的好文章。该文章描述了采取的一些步骤,使IDLE看起来更加现代化:


1
我相信Bryan是正确的。通过适当的关注,Tkinter可以变得非常漂亮。 - rectangletangle
@BryanOakley:你能修复一下“...原始截图可能看起来像这样:”段落后面的图片吗?现在在我的Firefox浏览器上显示为“alt文本”。 - bgoodr
@bgoodr:如果我猜的话,我会说stackoverflow的图片托管服务出了问题。如果我直接访问图片的URL,我会得到一个505错误。 - Bryan Oakley
3
请问您能否在这里发布一下调整内容,这样其他人就可以开始着手工作了。 - Nishanth Lawrence Reginold
什么玩笑...图像在哪里? - Tebe
1
@Копать_Шо_я_нашел:感谢您指出这一点。我已经重新添加了图片。 - Bryan Oakley

34
“仅仅不同”这个观点实际上是我主要的原因。Tk GUI 不像本地应用程序一样外观和行为,这会以多种微小的方式影响“外观和感觉”,使得一个复杂的应用程序在给定系统上与本地应用相比感觉奇怪和笨拙。
文件对话框可能是我所写的完美例子:它们可能不比某些系统上的本地对话框“更差”或“更好”,但它们是不同的,它们的行为方式与系统上的所有其他应用程序不同。
如果你是MacOS X用户,你可以通过将本机Mac应用程序与在具有X11兼容性层的Mac上运行的应用程序(如Gimp或Inkscape)进行比较来感受到它。它们的行为和所有其他应用程序不同(没有顶部菜单栏,cmd+tab 的工作方式略有不同,cmd+backtick 的工作方式也大不相同),因此-虽然它们在Linux X11桌面上的行为很好-同样的行为在Mac上感觉奇怪和笨拙。
Tk的缺点是这些GUI实际上没有任何本地支持。
对于可移植的UI,我可以推荐wxWidgets,它只是您的系统提供的本地UI的常见API层(外观) 。它可能与您目前的情况有点脱轨,但是它可能值得一看。

16
+1 对于“缺点是Tk GUI在任何地方都不是本地化的”,我认为这正是为什么它被认为是“丑陋”的原因。 - thijs
9
您知道Tk已经拥有本地文件对话框多年了吗?另外,Tk 8.5附带了Mac和Windows的本地小部件。可惜,Linux并没有真正的单一本地小部件集的概念。 - Bryan Oakley
4
TK最初的设计目的是模拟“本地”的Motif外观和感觉。 - ConcernedOfTunbridgeWells
3
我同意外观差异(有时很明显,有时很微妙)是声誉不佳的主要原因。我对Java应用程序也有同感。平铺支持在解决此问题方面起到了很大的作用,但开发人员仍然需要进行大量细致的工作使其感觉正确。 - Michael Carman
+1 不同于本地化。对我来说,这是第一原因。 - Christian Klauser
2
Tk的声誉不仅源于它的不同寻常,而且主要是因为它具有非常老式的外观,就像Motif和Windows 3.11。在过去的15年中,人们已经习惯了更现代化的GUI,并习惯了同质化。我永远不会使用Tk,因为它会让我的应用程序看起来又旧又不专业。 - Steve K

24

现在的Tk对本地外观GUI的支持比以前要好得多。 Tk的早期版本具有类似于Motif的外观和感觉,旨在与基于Motif的桌面环境(如MWM和CDE)一起使用。在这种环境下,它看起来像一个本地应用程序。长期以来,Motif被用作X11应用程序的默认GUI工具包。GTK和(在某种程度上)QT的出现意味着对于许多此类应用程序,这不再真实存在。

大多数现代跨平台GUI工具包-GTK,QT Tk,WXWidgets和其他工具-现在都有一些机制来使用底层本地小部件。WX从一开始就是为此而设计的--在X11上有GTK和Motif版本,在Windows上有Win32,(我记得)在OSX上也有版本。GTK有一个主题引擎,并使用基于本地小部件的主题。QT模拟了外观和感觉,Tk有本地工具包的包装器。

具有本地外观的TK应用程序示例:

  1. SnackAmp(Vista上的Win32)

“Windows

  1. Linux上的PostgreSQL访问

“本机外观的Tk


10

因为其外观是由既非用户体验设计师也非图形设计师而是程序员设计的,所以可能解决了在多个平台上拥有相同的用户界面的问题,但它看起来很丑。

补充: 实际上,将UI做到不丑陋是一门艺术。我的团队里有两个极端。一个人根本不关心UI:他看到一个按钮,无论它在屏幕上如何绘制,它都是一个按钮;即使你在鲜艳的红色背景上涂上“吓瞎我眼”酸橙色,他仍然认为它是一个按钮,因为它“像一个按钮一样工作”。另一个团队成员则全力打造“酷炫”的UI。但他完全忽略了这样一个事实:让Office 2007成为“Office 2007”的不仅仅是耀眼的外观,还包括图标、控件之间的一致性以及与它们交互的方式--所有这些小细节都将外观和感觉融为一体。结果?给猪涂口红。


9
只举一个例子:如果您看一下提供的示例,您会看到很多额外的行——滚动条有几个,然后文本占位符的矩形也有几个,所以在边框上会发生很多事情。
对于程序员来说,逻辑上可能没有任何问题,因为逻辑上每个元素都只有自己的边框。但对于其他人来说,它看起来过载了。
这是一个视觉设计问题,而不是编程问题。这更像是“为什么iPod很好而Zune很丑”的问题——您无法得到一个直接可衡量的答案,但大多数人会同意,这是您需要处理的事实,如果您关心他们的意见——即销售给他们。

8

试图客观地看待这个问题是相当困难的,我认为这是非常主观的。

以下是一些让我感到困扰的点:

  • 出现滚动条的地方太多,不仅在需要的地方
  • 比较“粗”的滚动条,占用了很多空间
  • 很多看起来很粗的字体,例如菜单标题等
  • 某些地方使用等宽字体(打字机风格)

1
“滚动条无处不在”——这是UI设计师的功能。在Tk应用程序中,如果您没有将它们放在那里,就不会得到滚动条。而且,很可能制作出根据内容隐藏或显示自己的滚动条。您所有其他评论似乎只适用于非常旧版本的Tk,或者可能是Linux版本。在Mac和Windows上,您可以获得本地字体、本地滚动条和可变宽度文本。 - Bryan Oakley

6

1
Tk是否美观,这取决于个人,但我会说它至少不丑(除了Android)。看看我用纯Python和Tkinter(Tk)制作的程序的截图。您只需要知道如何以更美观的方式使用它。enter image description hereenter image description here

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