常用组件

Tkinter有两种组件来源,一种是传统的来自于Tkinter模块的组件,另一种是来自ttk模块的带主题的组件。其中ttk模块中的组件兼容Tkinter模块的原生组件,但又扩展了几个新的组件。在应用设计中,可以尽量使用ttk模块的组件以获得更好的外观和功能。

通用属性

组件都具有一些通用的属性这些属性可以直接在所有组件中直接配置使用。

  • text,组件上需要显示的文本内容。
  • height,组件的高度,单位通常使用文字行高或者像素,ttk模块中的部分组件不支持此属性。
  • width,组件的宽度,单位通常使用字母宽度或者像素。
  • background或者bg,设定背景色,ttk模块中的组件不支持此属性。
  • foreground或者fg,设定前景色,ttk模块中的组件不支持此属性。
  • font,设定字体名称,ttk模块中的组件不支持此属性。
  • cursor,鼠标指向组件时的指针样式。
  • padx,额外的内部水平留白,ttk模块中的组件不支持此属性。
  • pady,额外的内部垂直留白,ttk模块中的组件不支持此属性。
  • padding,ttk模块中组件用于设定留白的属性。
  • takefocus,控制聚焦行为。
  • relief,组件的显示样式,默认是tk.FLAT,ttk模块中的组件不支持此属性。
  • style,ttk模块组件中指示组件样式的属性。
  • class_,ttk模块组件中组件的样式类名称。

按钮

按钮是最常用的组件,其创建格式为w = tk.Button(parent, option=value, ...)。其常用的配置属性有:

  • bitmap,按钮上的标准位图,用以替代文字。
  • image,按钮上的图片,用以替代文字。
  • command,按钮点击后执行的函数或者方法。
  • state,用以设定按钮状态,可取tk.DISABLED来禁止点击。
  • textvariable,设定用于控制按钮文本的StringVar类型控制变量。

画布

画布是一个用来显示图片或者展示其他复杂布局的方形区域,在其上可以放置图片、文字、组件甚至是框架。画布的创建格式为w = tk.Canvas(parent, option=value, ...)。常用配置属性有:

  • scrollregion,创建一个比可视范围更大的滚动区,使用一个元组来定义,格式为(w, n, e, s)
  • confine,设为True将不能滚动到滚动区之外。

画布能够容纳多种元素,并且支持在其上绘画,所以画布的使用较为复杂,读者可在需要使用画布时参考相关的文档。

输入框

输入框是典型的信息收集组件,允许使用者在其中输入内容。输入框的创建格式为w = tk.Entry(parent, option=value, ...)。常用的配置属性有:

  • show,在输入时,输入框内显示的文字,使用show='*'可以创建密码框。
  • validate,指定何时指定输入框内容的验证,可以取focusfocusinfocusoutkeyallnone
  • validatecommand,指定用于验证输入框内容的方法。
  • textvariable,指定用于控制输入框内容的StringVar类型控制变量。

输入框常用的方法有:

  • .get(),取回输入框当前的内容。
  • .delete(first, last=None),删除输入框中指定位置或范围内的内容。

复选框

复选框用于让用户进行多项选择。其创建格式为w = tk.Checkbutton(parent, option=value, ...) 。常用的配置属性有:

  • command,当用户改变复选框时执行的动作。
  • indicatoron,当设为0时,整个复选框变为可切换状态的按钮。
  • offvalue,当不被选中时的值。
  • onvalue,当被选中时的值。
  • variable,指定关联控制变量,可以是StringVar或者IntVar类型。

在使用复选框时建议使用一个类型为IntVar的控制变量来控制和获取复选框的状态。

框架

框架是最基础的组件容器,每个框架都拥有独立的网格布局管理器。并且应用可以通过继承框架来组织功能相关的组件,以实现应用的模块化。框架的创建格式为w = tk.Frame(parent, option=value, ...)

标签

标签是用于在窗口上显示一行或者多行文字、图片的组件。标签的创建格式为w = tk.Label(parent, option=value, ...)。常用的配置属性有:

  • anchor,内容的对齐位置。
  • bitmap,加载标准位图,用以替代文字。
  • image,加载图片,用以替代文字。
  • textvariable,指定用于控制内容的控制StringVar类型控制变量。

命名框架

命名框架是一个特殊框架,其边框上可以附带一个标签。命名框架的创建格式为w = tk.LabelFrame(parent, option=value, ...)。常用的配置属性有:

  • labelanchor,标签放置位置。
  • labelwidget,使用非内部定义的标签组件。

列表

列表是用来按行列出数据的组件,通常用来提供用户进行单项选择或者多项选择使用。列表的创建格式为w = tk.Listbox(parent, option=value, ...)。常用的配置属性有:

  • activestyle,激活行的显示样式,可选值有underlinedotboxnone
  • listvariable,指定一个用于关联全部列表内容的StringVar类型变量。
  • selectmode,设定用户可选择内容的数量,可选值有tk.BROWSEtk.SINGLEtk.MULTIPLEtk.EXTENDED

常用的方法有:

  • .activate(index),激活指定行。
  • .curselection(),返回当前选择的行,没有已选择的行返回空白元组。
  • .delete(first, last=None),删除指定行。
  • .get(first, last=None),返回指定行。
  • .index(i),滚动指定索引内容到列表顶端。
  • .insert(i, *elements),插入内容到指定索引位置。
  • .itemconfig(index, option=value, ...),改变指定索引内容的配置,如前景、背景等。

列表组件不包含滚动条,所以在需要滚动条的时候需要将其与滚动条连接起来。以下给出一个可以参考的示例。

self.yScroll = tk.Scrollbar(self, orient=tk.VERTICAL)
self.yScroll.grid(row=0, column=1, sticky=tk.N+tk.S)

self.listbox = tk.Listbox(self, yscrollcommand=self.yScroll.set)
self.yScroll['command'] = self.listbox.yview

Tip

其他需要滚动条的组件也可以这样进行连接,包括标签、输入框、文本框等。

消息

消息是一个类似于标签的多行文本组件,其中的内容会保持一致的字体样式。消息的创建格式为w = tk.Message(parent, option=value, ...)。常用的配置属性有。

  • aspect,宽高比,取值100时为正方形,取值200时,宽为高的2倍。
  • textvariable,指定用于控制消息文本的控制变量。

单选框

单选框用于提供用户在一组选项中做出选择。将多个单选框组成一个功能组的方法是将其绑定到一个控制变量上,控制变量可以是IntVar或者StringVar类型。单选框的创建格式为w = tk.Radiobutton(parent, option=value, ...)。常用的配置属性有。

  • command,指定当用户改变单选框状态时执行的函数。
  • variable,指定单选框的控制变量。

刻度条

刻度条允许用户在一定的值区间内选择一个值。刻度条的创建格式为w = tk.Scale(parent, option=value, ...)。其常用的配置属性有。

  • digits,指定数字位数。
  • from_,浮点型,指定刻度条的区间起始值。
  • orient,指定刻度条的绘制方向,可选tk.HORIZONTALtk.VERTICAL
  • resolution,指定用户可以移动的最小步进值。
  • to,浮点型,指定刻度条的区间终止值。

滚动条

Tkinter中的组件都是不带滚动条的,在需要滚动条的位置需要手工建立并绑定。滚动条的创建格式为w = tk.Scrollbar(parent, option=value, ...)。常用的配置选项有。

  • command,当滚动条滚动时调用的函数。
  • orient,指示滚动条的放置方向。

大部分支持滚动条的组件都带有.xview()或者.yview()方法,将此方法绑定到相应滚动条的command属性上就可以实现组件对滚动动作的支持。但滚动条一般还需要跟随组件自身的滚动产生状态变化,这就需要将组件的xscrollcommand或者yscrollcommand绑定为滚动条的set方法,使两者之间保持联系。

转轮数字框

转轮数字框常用于让用户在一个指定区间或者值群内选择一个数字。其创建格式为w = tk.Spinbox(parent, option=value, ...)。常用配置属性有。

  • format,数字显示格式。
  • from_,区间的起始值。
  • increment,增长步进值。
  • to,区间的终止值。
  • values,列表类型,可以是字符串列表,提供固定的可选值。

文本框

文本框是用来编辑多行文本的组件,常用来做编辑器使用。其创建格式为w = tk.Text(parent, option=value, ...)。常用配置属性有。

  • autoseparators,当设置了Undo选项,该选项会自动控制编辑栈。
  • maxundo,最大Undo次数。
  • tabs,指定Tab键代表的空格数量。
  • undo,指示是否启用Undo功能。

文本框支持使用索引来对其中的内容进行访问。具体索引的格式及使用方法可以参考Python的官方文档。利用这些基于索引功能的方法可以做出一套功能比较全面的编辑器。

组合框

组合框是由输入框和下拉菜单组成的选择框。组合框由ttk模块提供,创建格式为w = ttk.Combobox(parent, option=value, ...)。常用的配置属性有。

  • values,下拉菜单中的可选项列表。
  • validate,输入框的验证时机。
  • validatecommmand,输入框的验证函数。
  • textvariable,指定控制输入框内容的控制变量

进度条

进度条是用来提示用户工作进度或者程序状态的组件,其创建格式为w = ttk.Progressbar(parent, option=value, ...)。常用的配置属性有。

  • length,组件的长度。
  • maximum,指示器的最大值,默认为100。
  • mode,指示器的工作模式,'indeterminate'模式为循环状态工作模式,'determinate'模式为进度提示模式。
  • orient,进度条的放置方向。
  • variable,指定用于设置和获取当前值的控制变量。

常用的方法有。

  • .start([interval]),启动进度条自动前进,定时移动进度条。
  • .step([delta]),使进度条的值增加delta
  • .stop(),停止自动进度条。

分割线

分割线就是在界面上划出的一道线,用来将组件进行视觉隔开。其创建格式为w = ttk.Separator(parent, option=value, ...)。常用的配置属性有。

  • orient,分割线的放置方向。

标签页

标签页用于在同一块位置盛放多页内容,并像卡片一样切换。创建格式为w = ttk.Notebook(parent, option=value, ...)。常用方法有。

  • .add(child, **kw),用于添加一个Frame,kw为新Frame页面的属性。
  • .forget(child),永久性移除一个页面。
  • .hide(tabId),临时隐藏一个页面。
  • .insert(where, child, **kw),在指定位置插入一个页面。
  • .select(tabId),获取当前页面,或者指定显示某个页面。
  • .tab(tabId, option=None, **kw),设置指定页面的属性。

标签页中每个页面都有以下属性可供访问和设置。

  • compound,图片或者文字的放置位置。
  • padding,四周的留白。
  • sticky,设定页面四边贴近的位置。
  • image,设置在标签上显示图片。
  • text,设置在标签上显示的文字。

树形列表

树形列表是一个强大的组件,不仅可以创建树形的内容,还可以作为表格组件使用。要建立一个树形列表,一般可以使用以下步骤。

  • 使用构造器建立组件,并且使用columns属性指定要显示的列的数量,并指定每一列的名称。
  • 使用.column().heading()方法建立列表头,并且配置各列的属性和宽度。
  • 从顶级内容开始添加,用.insert()方法建立整个树形结构。用.open()方法决定每个分支的展开或者收缩状态。

树形列表的创建格式为w = ttk.Treeview(parent, option=value, ...)。常用的配置属性有。

  • columns,由字符串组成的列识别标识序列,定义需要显示哪些列。
  • displaycolumns,定义要显示的列的顺序。
  • height,每行的高度。
  • padding,树形列表内部留白。
  • selectmode,内容选择方式,可取值有'browse''extended''none'

常用的方法有。

  • .column(cid, option=None, **kw),用于配置逻辑列的外观,逻辑列的cid可以使用列索引或者列标识。图标列需要使用cid为'#0'。每个逻辑列有以下配置项。
    • anchor,列中内容的对齐位置,使用锚点名设置。
    • id,列名。
    • minwidth,列最小宽度。
    • stretch,缩放时是否拉伸列,默认值为1,可以设为True
    • width,指定初始宽度,默认值为200。
  • .delete(*item),删除并销毁符合指定iid的行。
  • .detach(*item),删除符合指定iid的行。
  • .exists(iid),检索指定iid是否于列表中存在。
  • .heading(cid, option=None, **kw),配置指定列的标头,图标列的cid使用'#0'。可以用的配置项有。
    • anchor,内部文字的对齐位置,使用锚点位置。
    • command,设定当用户点击操作时的处理函数。
    • image,设定显示图片。
    • text,设定显示文本。
  • .set_children(item, *newChildren),为指定元素设定新的字内容。
  • .insert(parent, index, iid=None, **kw),插入一个进的元素,如果插入顶级元素,parent需要保持为空白字符串。
  • .item(iid[, option[, **kw]]),获取元素或者设置指定元素的属性。
  • .move(iid, parent, index),移动指定元素。
  • .selection_add(items),向选中内容中添加指定元素。
  • .selection_remove(items),从选中内容中去除指定元素。
  • .selection_set(items),将指定元素设为选中状态。
  • .selection_toggle(items),切换指定元素的选中状态。