Python 图形界面框架TkInter之在源码中找pack方法
作者:叫我王员外就行 发布时间:2021-10-06 05:10:56
前言:
tkinter提供了3种布局管理方式:
1、pack
2、grid
3、place
每种布局管理器都非常有用,根据不同的需求,选择对应的布局方式,每个控件都可以使用pack作为布局管理器,从源码中看下pack()
在哪里?
一、HelloWorld看pack()
import tkinter
my_window = tkinter.Tk()
my_window.geometry('400x200')
hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')
hello_world_label.pack()
my_window.mainloop()
代码说明:
1、首先导入
tkinter
模块2、创建Tk对象,此对象表示当前应用的窗口
3、设置窗口大小为宽800,高200像素
4、创建Label对象,并放置在当前应用的窗口中
5、调用Label对象的pack()方法显示出来
6、
mainloop()
开始主循环
输出结果:
为什么每个控件都可以调用pack()
方法呢?我们进入pack()方法看看
二、pack()方法分析
pack = configure = config = pack_configure
从ide点击pack()
方法,看到的源码就上面这个,可见pack实际指向的pack_configure,那我们继续到pack_configure()方法看看它的实现
三、pack_configure()方法分析
def pack_configure(self, cnf={}, **kw):
self.tk.call(
('pack', 'configure', self._w)
+ self._options(cnf, kw))
由于底层基于Tcl/Tk框架(1个脚本解释器),所以最后调用的都是Tk提供的API
仔细观察,你发现pack_configure
位于一个叫做Pack的类中,而刚才下面这一行,也位于Pack类中。
pack = configure = config = pack_configure
pack是Pack类中的类变量,且又指向pack_configure
这个方法对象(注意:在Python的类中,每个实例方法,都属于method类的一个对象,所以仍然可以赋值给其它变量),那么为啥Label能调用Pack类中的方法呢?这和tkinter中的每个控件类的继承结构有关
四、Label的继承结构
Pack
类是Label的父类,上图为Label控件的继承结构,Label中并没有定义pack()方法,此时会向上查找pack()方法
1、先在Label中查找pack()方法,发现没有
2、向上的父类Widget中查找pack()方法,发现还没有
3、继续向上的父类BaseWidget查找pack()方法,发现还没有
4、接着再向父类Pack中查找pack()方法,终于在Pack类中找到pack属性,接着就会调用pack属性
5、pack属性实际指向的pack_configure方法对象
6、最终pack_configure方法对象被调用
五、查看pack()方法源码的收获
1、学习了Label的继承结构
2、学习了多个类变量指向同一个方法对象的用法,这样做的好处是为了代码的兼容性
pack = configure = config = pack_configure
实际工作中,可以用pack、也可以用pack_configure
,都是一样的,中间的config、还有configure不建议使用,因为它们与Label本身的config
、configure
方法存在冲突,会优先调用修改Label本身属性值的config、configure方法
3、直接在源码中查看pack()的使用方式,不必再查询API文档
所有的pack()
方法中,可以使用的关键字参数
来源:https://blog.csdn.net/cadi2011/article/details/122954469


猜你喜欢
- 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最
- 0.前提JavaScript对象的属性分为两种存在形态. 一种是存在实例中, 另一是存在原型对象中.根据上述, 检测属性的时候会出现4种情况
- 当我们在终端上(比如Goland)运行gin框架搭建的服务时,会发现输出的日志是可以带颜色的。比如下图中的最后一行,就是请求一个方法时的输出
- 本文实例为大家分享了vue组件实现可搜索下拉框的具体代码,供大家参考,具体内容如下一、效果二、代码dropdown-ext.vue<t
- 一、前言我们今天要安装的selenium 就是浏览器自动化测试框架,是一个用于Web应用程序的测试工具,就是模拟用户操作。支持的浏览器包括C
- try ...except 是最常见的捕获处理异常的结构,其主要作用是将可能出现问题的代码块用try :包裹起来,不至于出现错误让程序崩溃,
- 前言最近在工作中碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可
- 当我们需要批量删除数据库中的表时,对于单个删除一些表是否感到烦躁,厌倦,干脆写个脚本用得了。本脚本使用游标循环删除,对于数量比较小,用游标暂
- 在学习 Python 类的时候,会碰见类中有 __init__() 这样一个函数,其实它就是 Python 的构造方法。构造方法类似于类似
- 1. 首先到 nodejs.org 下载 Node.js 安装包并安装。2. 打开 Sublime Text 2 编辑器。选择菜单 Tool
- 表级锁该锁会锁定整张表,它是MySQL中最基本的锁策略,并不依赖于存储引擎(不管你是MySQL的什么存储引擎,对于表锁的策略都是一样的),并
- mysql limit 分页的用法及注意事项:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,my
- 本文实例为大家分享了Python使用Pillow添加水印的具体代码,供大家参考,具体内容如下python数据分析得到的图片,并对照片添加水印
- 写入文件使用open()函数和write()函数但是有两种写法,分别是'a'和'w'。'a'
- 作者:Robert Lair and Jason Lefebvr Intensity Software, Inc.
- 我就废话不多说了,大家还是直接看代码吧!import requests, jsonr = requests.get('http://
- linecache, 可以用它方便地获取某一文件某一行的内容。而且它也被 traceback 模块用来获取相关源码信息来展示。用法很简单:&
- 如何用ASP来识别操作系统是vista的?我在网上找了个函数,但是不能判断是vista系统,希望大家帮忙. 这个是我在网上找的函数: Fun
- 一、查看定时策略是否开启show variables like '%event_scheduler%'; * on
- LabelEncoder 和 OneHotEncoder 是什么- 在数据处理过程中,我们有时需要对不连续的数字或者文本进行数字化处理。-