zoukankan      html  css  js  c++  java
  • Tk 的基本概念-组件—Tkinter 教程系列03

    Tk 的基本概念-组件—Tkinter 教程系列03

    前言

    Tk 系列教程:

    通过上一节的程序实例,我们掌握了编写一个 Tk 程序的基本步骤和完成它需要的一些工作。这一节,我们回过头来看看这些程序,并且专注于讲解对于理解 Tk 至关重要的三个概念:1、组件(Widgets)2、集合管理(Geometry Management)3、事件处理(Event Handling)。

    组件(Widgets)

    组件是所有你在屏幕上看到的东西。在我们的例子中,我们创建了一个按钮(button),输入框(entry),显示区域(labels)和一个框架(frame)。一些其他的组件包括:复选框(checkboxes),树状视图(tree views),滚动条(scrollbars),文字区域(text areas)等等。

    组件经常被认为是控制组件(控件),但是他们是组成视窗的基本单位。

    组件类(Widget Classes)

    组件是对象,是代表按钮,框架等类的实例。所以你要做的第一件事情是区分你要创建并实例化的类。

    窗口层次结构(Window Hierarchy)

    在创建一个组件的对象时,需要提供它的父类。所以我们需要理解它们的层次结构。在 Tk 中,所有的组件都是一个窗口层次结构中的一部分。在这个结构中,主窗口(root)在最顶层,并能往下延申。

    在我们第二节的例子中,我们创建了一个主窗口(root),并在其下面延申了许多结构,这类似于数据结构中的数(tree),每个子结构都是这个大结构的子树。

    创建并使用组件(Creating and Using Widgets)

    每一个组件都是 Python 中的一个对象。当创建一个组件时,我们必须向创建函数以参数的形式传递它的父类。唯一的例外是主窗口(root),它是窗口结构层次的顶层,没有父类。例如:

    root = Tk()
    content = ttk.Frame(root)
    button = ttk.Button(content)
    

    至于是否将组件对象保存到变量中,这取决于你的想法,当然也取决于你之后是否会引用他们。因为对象存在于这个窗口层次结构之中,所以即使你不去引用它们,它们也不会被垃圾回收器回收掉。

    设置选项(Configuration Options)

    所有的组件都有许多不同的设置选项,它们控制随着组件的显示和行为。

    可用的设置选项取决于你所使用的组件类。大部分组件都有极大的相似性,所以在不同的组件中,执行相同事件的选项基本上被命名为相同的名字。例如,按钮(button)和显示框(label)都有 text 选项,用来控制字符在组件中的显示。而滚动条(scrollbar)就没有这个选项,因为它也不需要。同样的道理,按钮类中有 command 选项,用来告诉它如果被点击,需要执行的动作,而其他类则没有。

    设置选项可以通过传递参数在第一次创建时被设置,你可以在之后查看或者修改它们。如果你不确定一个组件的所有选项,你可以直接向组件询问它们。下面是一组 Python 解释器的交互记录,可以很好的说明这一点。

    % python
    >>> from tkinter import *
    >>> from tkinter import ttk
    >>> root = Tk()
    # 创建按钮,通过传递两个参数:
    >>> button = ttk.Button(root, text="Hello", command="buttonpressed")
    >>> button.grid()
    # 查看按钮的 text 选项的值:
    >>> button['text']
    'Hello'
    # 改变 text 选项的值:
    >>> button['text'] = 'goodbye'
    # 另一个方法:
    >>> button.configure(text='goodbye')
    # 检查现在 text 选项的值:
    >>> button['text']
    'goodbye'
    # 得到 button 组件 text 选项的所有信息:
    >>> button.configure('text')
    ('text', 'text', 'Text', '', 'goodbye')
    # 得到所有button组件的所有选项的信息和可能的取值:
    >>> button.configure()
    {'cursor': ('cursor', 'cursor', 'Cursor', '', ''), 'style': ('style', 'style',
    'Style', '', ''),
    'default': ('default', 'default', 'Default', <index object at 0x00DFFD10>,
    <index object at 0x00DFFD10>),
    'text': ('text', 'text', 'Text', '', 'goodbye'), 'image': ('image', 'image',
    'Image', '', ''),
    'class': ('class', '', '', '', ''), 'padding': ('padding', 'padding', 'Pad', '',
    ''),
    'width': ('width', 'width', 'Width', '', ''),
    'state': ('state', 'state', 'State', <index object at 0x0167FA20>, <index object
    at 0x0167FA20>),
    'command': ('command', 'command' , 'Command', '', 'buttonpressed'),
    'textvariable': ('textvariable', 'textVariable', 'Variable', '', ''),
    'compound': ('compound', 'compound', 'Compound', <index object at 0x0167FA08>,
    <index object at 0x0167FA08>),
    'underline': ('underline', 'underline', 'Underline', -1, -1),
    'takefocus': ('takefocus', 'takeFocus', 'TakeFocus', '', 'ttk::takefocus')}
    

    后记

    下一部分我们将会介绍关于 Tk 中 几何管理(Geometry Management)这一概念。

    欢迎光临我的个人博客:chens.life

    Stay Hungry, Stay Folish.
  • 相关阅读:
    Python 中多线程之 _thread
    Python ftplib 模块关于 ftp的下载
    nessus 漏洞扫描安装和使用
    实战medusa暴力破解
    浅谈python 中正则的一些函数
    一句话木马和中国菜刀的结合拿webshell
    浅说套接字socket做个小小的监控
    小巧的ssh客户端
    统计字符串的数字,英文字母,空格及其他的个数
    mysql字符串函数
  • 原文地址:https://www.cnblogs.com/relaxx/p/The-basic-concept-of-Tk-widgets-Tkinter-tutorial-series-03.html
Copyright © 2011-2022 走看看