python3.Tkinter学习之基本Widgets

译自Modern Tkinter for Busy Python Developers

本章介绍一些几乎可以在任何用户接口中找到的Widgets:frames, labels, buttons, checkbuttons, radiobuttons, entries and comboboxes。

0X01 Frames

Widget综述

一个frame就是一个简单的长方形widget。Frames用来作为其它widgets的容器,这些widgets受控于图形管理器例如gird。

创建:frame = ttk.Frame(parent)

Frames有一些配置选项可以改变其显示方式:

  • 尺寸 ttk.Frame(parent,height=350,width=350)
    • 350 是 350 像素
    • 350c 是 350 厘米
    • 350i 是 350 英寸
    • 350p 是 350 printer’s points(1/72英寸)
  • Padding frame["padding"]=(5,10)
    • (a) 上下左右padding均为a
    • (a,b) 水平方向padding为a,垂直为b
    • (a,b,c,d) 左,上,右,下的padding分别为a,b,c,d
  • 边界 frame["borederwidth"]=2
    • 边界的显示方式配置选项为relief。有flat,raised,sunken,solid,ridge,groove几个可选值。

0X02 Labels

Widget综述

一个label就是显示文本或图片的widget,用户会看到但不会与之交互。Label用于识别其他用户接口,提供反馈或者结果等等。

创建:label = ttk.Label(parnt,text="Full name:")

Labels有一些配置选项可以改变其显示方式:

  • 显示的文本 label["text"]
    • 可以用widget监测变量,变量一旦改变就显示新的变量值。
    • resultsContents的值要通过get,set方法来读取或写入。
  • 显示的图片 label["image"]
  • 选项compound label["compound"]
    • none: 只显示图像或文本
    • text: 只显示文本
    • image: 只显示图像
    • center: 文本在图像中间
    • top: 图像在文本上面
    • left/bottom/right: 图像在文本左、下、右方
  • 布局
    • 选项anchor label["anchor"]
      • 粘附方向。”n”(北方,north),”ne”(东北,north-east),”e”(东方,east),…
    • 选项wraplength label["wraplength"]
      • 每行文本的字体长度
    • 选项justify label["justify"]
      • 文本对齐方式
  • 字体、颜色及其他
    • 可用选项有:
      • font
      • style
      • foreground
      • background
      • relief

0X03 Buttons

Widget综述

按钮,用于和用户交互,可以显示文本,图片,同时有着多种配置选项。

创建:button = ttk.Button(parent, text="Okay", command=submitForm)

按钮有多种选项和方法可以改变显示方式和行为。

  • 文本或图片
    • text, textvariable,image,compound和label一样。
  • 默认按钮button["default"]
    • 值为“active”时表示这是一个默认按钮,通常值为“normal”
    • 设置这个选项不会绑定一个Enter Key事件激活按钮,需要自己绑定。
  • 命令选项 button["command"]
    • 可以用invoke方法调用command选项的值,及对应的命令,通常是一个函数。
    • button.invoke()
  • 按钮状态
    • button.state(['disabled']) 使按钮失效
    • button.state(['!disabled']) 恢复按钮
    • button.instate(['disabled']) 如果按钮失效,返回True,否则返回False
    • button.instate(['!disabled']) 如果按钮有效,返回True,否则返回False
    • button.instate(['!disabled'],cmd) 如果按钮有效,执行cmd

0X04 Checkbuttons

复选框像一个长方形按钮,可以调用命令,也标志着一个布尔值。用于用户在多个值中选择时。

创建:

可用配置选项:(上文提及的)

  • text,textvariable,image,compound,command

可用方法:(上文提及的)

  • state,instate,invoke

用法参照前面所述的widgets中同名选项及方法。

  • 不像按钮,checkbutton有一个值,和textvariable类似,variable选项也可以用于读取和输入checkbutton的值。
  • 默认情况下,被选中的值是1,否则为0。但是这些值可以通过onvalue,offvalue选项来改变。

因为checkbutton不会自动设定为链接值,使用是必须保证有合适的初始值。

0X05 Radiobuttons

单选框,从多个值中选择一个时使用。

创建:


 

radiobuttons有着大多数与checkbuttons相同的配置选项,除了onvalue和offvalue变成了单个value选项。

一系列的radiobuttons有着同一个链接变量,但是不同的值,当变量有一个给定值时,对应的radiobutton会被选中。

0X06 Entry

Widget综述

输入框用于用户需要键入内容时。

创建:

Entry不像button,没有图像或文本来标识,若需标识,需要单独用一个label。

选项:

  • width
    • 用于设定输入框宽度。
  • textvariable
    • 用于写入或读取输入框内的值。方法:get,set
  • command
    • entry被改变时调用函数。
  • show
    • 可设定为想要显示的字符。例如:entry["show"] = "*"
      方法:
  • state, instate
  • insert, delete。用于直接读取或写入,无textvariable时也可用。

    0x07 Combobox

组合框,即下拉选项。

创建:

和entry一样,textvariable链接了combobox的当前值。可用get,set方法。

可以绑定虚拟事件,用于值被改变时执行函数。

country.bind("<<ComboboxSelected>>", function)

特别地,combobox需要预设值。

country['values'] = ('USA', 'Canada', 'Australia')

可以通过current方法来获取当前选项。

Leave a Reply

Your email address will not be published.