使旧Tcl / Tk应用程序适应现代标准的建议

时间:2017-11-24 17:45:42

标签: widget styles themes tcl tk

我正在转换旧的Tcl / Tk应用程序(20年前编写的......)以及有关如何操作以及如何操作的任何建议,我们将不胜感激。

目前,我可以调整代码并且它可以工作,但它有点难看(外观和感觉并不是非常令人满意,特别是因为应用程序应该在Linux和MacOS上运行)。

为了改善这一点,我在Tk中发现了两个重要的变化:主题小部件和网格几何管理器的引入。

Q1)从严格的外观和感觉的角度来看,这是一个好主意"切换到网格方法(这是一项大工作)?我可以混合网格和打包(因为对于某些动态GUI部分,打包方法更简单)?

对于外观和感觉,我尝试使用主题小部件(用ttk:label替换标签,......)但是它还不能令人满意。

例如,应用程序有一个标题区域(根据所选的菜单选项,可以包含多个不同的标题)。基本上我用它创建了它:

ttk::style theme use clam

ttk::frame .c -padding "4"
grid .c  -sticky nsew 

ttk::label .c.t -relief groove -borderwidth 4 -justify center -text \
    "this is a title.\nAnd its subtittle\nHow to increase line spacing ?\nWhat about font size ?"
grid .c.t

标题可以是多行的(并且可以使用.c.t configure -text "new title"多次修改)。结果是

enter image description here

Q2)如何增加2行之间的空间? (以及如何增加字体大小)?

Q3)我看到了一个文本小部件,但我找不到它的主题版本?我错过了什么吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

q1)是的,您可以根据需要混合包装和网格。只是不在同一帧内。有些人喜欢专门使用网格,有些人喜欢混合网格。

对主题here进行了比较。我发现Linux上的'arc'和'clearlooks'主题看起来很不错。对于Mac OS X,请保留主题 作为默认的'aqua'。

q2)可以使用font命令创建新字体。对于ttk小部件 这些可以使用ttk::style命令应用(在大多数情况下)。

对于ttk::label,线条间距由显示的任何字体设置 text命令可以让您更好地控制行间距。

package require Tk
ttk::style theme use clam

ttk::frame .c -padding "4"
grid .c  -sticky nsew

font create newfont
font configure newfont -size 13 

ttk::style configure New.TLabel \
    -font newfont \
    -justify left
ttk::label .c.t -relief groove -borderwidth 4 -text \
    "this is a\nmultiline text.\nHow to increase line spaceing ?" \
    -style New.TLabel
grid .c.t

q3)text命令没有相应的ttk小部件(列表框也没有)。