zoukankan      html  css  js  c++  java
  • 《tkinter实用教程二》ttk 子模块

    本教程是博主个人心血,未经允许不可引用,引用必举报,举报必封号。

    《tkinter实用教程一》Linux 环境下安装tkinter

    《tkinter实用教程二》tkinter 子模块 ttk

    《tkinter实用教程三》tkinter Button 控件

    《tkinter实用教程四》tkinter 布局管理 Grid

    《tkinter实用教程五》tkinter ttk.Frame控件

    tkinter 的子模块 ttk

    本文主要介绍 tkinter 子模块的特性,以及和原生 tkinter 控件之间的区别。

    tkinter.ttk 模块提供了对 tk 风格控件集合的访问途径,在 tkinter 8.5 中引入。

    引入 tkinter.ttk 的基本思想是尽可能将实现控件行为的代码与实现其外观的代码分开。

    如果用一句话解释引入 ttk 的目的,那就是:

    使用 ttk 控件可以改善应用程序的外观和感觉。

    ttk 模块是 tkinter 的新特性,因此,建议使用 ttk 控件作为开发和学习的重点。

    如何创建 ttk 控件

    创建 ttk 控件的方法和 tkinter 控件的方法略有不同:

    创建一个 tkinter 按钮:

    from tkinter import *
    
    root = Tk()
    btn = Button(root,text="tkinter 按钮")
    btn.pack()
    
    root.mainloop()
    

    创建一个 ttk 按钮:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    btn = ttk.Button(root,text="ttk 按钮")
    btn.pack()
    
    root.mainloop()
    

    以下是两段代码的执行结果:

    01_tkinter_btn.png02_ttk_btn.png

    从截图可以明显看出 tkinter 原生按钮的样式和 ttk 模块按钮的默认样式是不一样的。

    如何设置 ttk 控件的样式

    ttk 子模块的引出,主要目的是解决界面美观度和分离控制代码和样式代码的目的。

    所以 ttk 在样式控制上和 tkinter 有较大区别。

    下面以 Label 对象为例,通过创建一个蓝底红字的标签,说明二者的主要区别:

    使用 tkinter 控件的代码:

    from tkinter import *
    
    root = Tk()
    l1 = Label(text="label1",fg="red",bg="blue")
    l1.pack()
    
    root.mainloop()
    

    使用 ttk 控件的代码:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    
    style_default = ttk.Style()
    style_default.configure("TLabel",foreground="red",background="blue")
    
    l1 = ttk.Label(root,text="lable1",style='TLabel')
    l1.pack()
    
    root.mainloop()
    

    以下是代码执行的结果:

    03_label.png04_label.png

    二者在展示效果上基本没有区别,主要区别在代码的编写上。

    由于 ttk 分离了控件的创建代码和样式代码,所以代码看起来比较复杂,行数较多。

    实际上,ttk 由于抽离了样式代码,同样的样式只需要写一次,在创建控件的时候可以直接引用,所以当控件较多时,会极大的降低工作和代码量。

    tkinter 原生控件每次创建一个控件,都需要写一遍样式代码,所以不适合使用在稍微复杂一点的应用中。

    configure() 函数的参数

    ttk.Style() 对象实例能够通过 ttk.Style().configure() 函数设置样式各选项的值。
    ttk.Style().configure() 函数的第一个参数是样式的名称,ttk 中所有的控件都默认分配了一个样式名称,例如 Button 组件的默认样式名称是 "TButton"。
    Label 控件的默认样式名称是 "TLabel"。

    所以上述 ttk 样式代码还可以写成如下模式:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    
    style_default = ttk.Style()
    style_default.configure("TLabel",foreground="red",background="blue")
    
    l1 = ttk.Label(root,text="lable1")
    l1.pack()
    
    root.mainloop()
    

    虽然,在创建 Label 对象 l1 时,并没有指定样式名称,但是 style_default 同样会影响到 l1 的样式,因为 "TLabel" 样式是 Label 对象默认的样式。

    代码执行结果如下图:

    05_style.png

    ttk 支持的控件

    ttk 带有17个控件,其中11个已经存在于 tkinter 中:ButtonCheckbuttonEntryFrameLabelLabelFrameMenubuttonPanedWindowRadiobuttonScaleScrollbar

    6个新的窗口控件类是:ComboboxNotebookProgressbarSeparatorSizegripTreeview。 所有这些类都是Widget的子类。

    ttk 控件通用参数

    ttk.Widget 类定义了 tk 风格控件的标准可选参数通用方法,该类类似于 Java 中的接口,不应该直接实例化。

    1. 所有 ttk 控件都能接受以下参数:
    参数 描述
    class 指定窗口类。 该类用于在选项数据库中查询窗口的其他选项、确定窗口的默认绑定标签以及选择控件的默认布局和样式。 此选项是只读的,只能在创建窗口时指定。
    cursor 指定要用于控件的鼠标光标。 如果设置为空字符串(默认值),从父控件继承光标。
    takefocus 确定窗口在键盘遍历期间是否接受焦点。 返回 0、1 或空字符串。 如果返回 0,则表示在键盘遍历期间应完全跳过该窗口。 如果为 1,则表示只要窗口可见,就应该接收输入焦点。 空字符串意味着遍历脚本决定是否关注窗口。
    style 可用于指定控件样式。
    1. 可滚动控件的通用可选参数

    具备滚动条的控件支持以下可选参数:

    参数 描述
    xscrollcommand 用于与水平滚动条通信。当widget窗口中的视图发生变化时,widget会根据scrollcommand生成Tcl命令。通常这个选项由一些滚动条的Scrollbar.set()方法组成。 这将导致滚动条在窗口中的视图发生变化时更新。
    yscrollcommand 用于与垂直滚动条通信。 有关更多信息,请参见上文。
    1. 标签类控件的通用参数
      LabelButton类Button 控件支持以下可选参数:
    参数 描述
    text 指定在控件中展示的字符串
    textvariable 指定一个变量名,这个变量的值会填充text参数,展示在控件中。
    underline 如果设置,则指定要在文本字符串中加下划线的字符的索引(从 0 开始)。 下划线字符用于助记符激活。
    image 指定要显示的图像。 这是一个包含 1 个或多个元素的列表。 第一个元素是默认图像名称。 列表的其余部分是由 Style.map() 定义的一系列 statespec/value 对,指定当小部件处于特定状态或状态组合时要使用的不同图像。 列表中的所有图像都应具有相同的大小。
    compound 在文本和图像选项都存在的情况下,指定如何相对于文本显示图像。 有效值为:text:仅显示文本;image:仅显示图像;top、bottom、left、right:分别显示文本的上方、下方、左侧或右侧的图像。none:默认值。 显示图像(如果存在),否则显示文本。
    width 如果大于零,则指定为文本标签分配多少字符宽度的空间,如果小于零,则指定最小宽度。 如果为零或未指定,则使用文本标签的自然宽度。
    1. 兼容性选项
    参数 描述
    state 可设置为 normaldisabled 以控制“禁用”状态位。 这是一个只写选项:设置它会更改控件状态,但 Widget.state() 方法不影响此选项。
    1. 控件状态

    控件状态由独立的状态标志组成的位图:

    参数 描述
    active 鼠标光标在小部件上,按下鼠标按钮会导致一些动作发生。
    disabled 在程序控制下,控件被禁用
    focus 焦点
    pressed 控件被按下
    selected Ontruecurrent 用于诸如 Checkbuttons 和 radiobuttons 之类的东西
    background Windows和Mac有一个“active”或前景窗口的概念。背景状态在后台窗口中为控件设置,并在前台窗口中清除。
    readonly 只读,不允许用户改动
    alternate 特定于窗口控件件的替代显示格式。
    invalid 控件的值无效。

    博主个人博客【魏大王官网】,内容更精彩!!

    《tkinter实用教程一》Linux 环境下安装tkinter

    《tkinter实用教程二》tkinter 子模块 ttk

    《tkinter实用教程三》tkinter Button 控件

    《tkinter实用教程四》tkinter 布局管理 Grid

    《tkinter实用教程五》tkinter ttk.Frame控件

    我的个人博客 Ahoh(www.ahoh.club),找我一起玩耍吧!!
  • 相关阅读:
    简体转换繁体
    错误解决:[A potentially dangerous Request.Form value was detected from the client (warning="卡Ć..."). ]
    如何准备软件工程师的面试[转Google]
    Microsoft New DownLoad Address [Share]
    仿windows关机对话框的提示框效果
    JS弹出窗口的运用与技巧
    2007新年贺语
    VSTOexcel编程 [待续] [12月5日更新,详见文档下面]
    常用的SQL和TSQL语句(一)
    常用的SQL和TSQL语句(三)行列转换
  • 原文地址:https://www.cnblogs.com/weidawang/p/15423244.html
Copyright © 2011-2022 走看看