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
Tk 的基本概念-组件—Tkinter 教程系列03的更多相关文章
- Tkinter教程系列01——引言和安装Tk
Tkinter教程系列01--引言和安装Tk 首发于我的个人博客 https://chens.life/tkinter-tutorial-chapter-01-introduction-and-ins ...
- 第一个真正的 GUI 程序——Tkinter教程系列02
第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...
- 掌握 javascript 核心概念 最好的教程 系列 之一
链接 新链接 函数优先, 在扫描创建变量阶段, 会先收集函数, 如果前面有同名函数或者变量, 这个新函数会覆盖前面同名的: 而如果这时候是变量, 则不能去覆盖前面已有的值. function test ...
- spring cloud 2.x版本 Spring Cloud Stream消息驱动组件基础教程(kafaka篇)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka-ri ...
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...
- WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
- Netty4.x中文教程系列(一) 目录及概述
Netty4.x中文教程系列(一)目录及概述 Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. Netty是一个NIO客户端 服务端框架 ...
- Netty4.x中文教程系列(三) ChannelHandler
Netty4.x中文教程系列(四) ChannelHandler 上一篇文章详细解释了Hello World示例的代码.里面涉及了一些Netty框架的基础. 这篇文章用以解释ChannelHandl ...
- Windows 8实例教程系列 - 数据绑定基础实例
原文:Windows 8实例教程系列 - 数据绑定基础实例 数据绑定是WPF,Silverlight以及Windows Phone应用开发中最为常用的开发技术,在基于XAML的Windows Stor ...
随机推荐
- NGK.IO的智能合约是炒作还是未来商业的主流?
随着NGK主网的上线,NGK市场也备受关注.目前,NGK代币价格已经由初始价格0.0215美元涨到现在的0.86美元,代币价格上涨40倍!数字货币市场也已经将重点目光放到了NGK代币上,相信在不久的将 ...
- kubernetes和docker----2.学习Pod资源
Pod--k8s最基础的资源 我们想要的是单个容器只运行一个进程 然而有时我们需要多个进程协同工作,所以我们需要另外一种更加高级的结构将容器组合在一起---pod Pod 我们来看一个最基本的pod ...
- 关于电脑硬盘的二三事(SATA接口)
@ 目录 前言 接口分类 SATA3接口 机械硬盘 机械硬盘的特点和主要参数 西部数据机械盘分类 绿·蓝·黑盘 红盘 紫盘 金盘 希捷机械盘分类 酷狼 酷鱼 酷鹰 银河 SATA3接口的固态硬盘 固态 ...
- IntelliJ Idea Error Address localhost 1099 is already in use.
Reference: https://stackoverflow.com/questions/38986910/intellij-idea-address-localhost1099-is-a ...
- Java流程控制:循环结构
一.简介 顺序结构的程序语句只能被执行一次,如果您想要同样的操作执行多次,就需要使用循环结构. Java中有三种主要的循环结构: 'while'循环 'do...while'循环 'for'循环 在J ...
- JS产生GUID
//生成全球唯一字符串function guidGenerator() { var S4 = function () { return (((1 + Math.random()) * 0x10000) ...
- 只需2分钟!PC端的报表即可转换成手机报表
转: 只需2分钟!PC端的报表即可转换成手机报表 手机制作报表,这个大家不知有没有尝试过,虽然我们平时都用电脑做,但是电脑要是不在身边了,手机就可以用来应应急.但其实小编并没有在手机上制作报表的实践经 ...
- HDOJ-1358(字符串压缩+KMP)
Period HDOJ-1358 这题还是属于KMP算法的应用,属于字符串压缩问题.也就是在一个字符串s中寻找一个前缀,使得s可以被一份或者多份前缀子串t拷贝连接,也就是串接. #include< ...
- vue打开新窗口并且实现传参,有图有真相
我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页. 通过 ...
- Java的封装继承和多态
封装 定义:属性私有private:get/set 目的 提高程序的安全性,保护数据 隐藏代码的实现细节 统一接口 提高系统的可维护性 代码 public class Student { //名字 p ...