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
猜你喜欢
- 背景写一个python脚本,实现简单的http服务器功能:1.浏览器中输入网站地址:172.20.52.163:200142.server接
- 前言相信各位一定有收到过这样的群发短信,据说还被归类为玩转微信的五大技巧之一╮(╯▽╰)╭但,其实,只要跑一下脚本,就轻松找出删除自己的好友
- 1、列表的创建与遍历与整数和字符串不同,列表要处理一组数据。因此,列表必须通过显式的数据赋值才能生成,简单将一个列表赋值给另一个列表不会生成
- Python——re模块 简介定义:re模块称为正则表达式;作用:创建一个"规则表达式",用于验证和查找符合规
- 1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳import timeimport datetimet = time.time()print
- 来源 | OpenCV学堂作者 | gloomyfish基本思路选择以前我用过Caffe,用过tensorflow,最近
- 图像的轮廓检测,如计算多边形外界、形状毕竟、计算感兴趣区域等。Contours : Getting Started轮廓简单地解释为连接所有连
- 在html 5增加了新元素header、footer,测试过发现IE不能解析html 5新增的元素。代码如下:<!DOCTYPE ht
- Python 能做很多无聊,但有意思的事情,例如接下来的一些案例。以下程序,不要发代码,要不实现不了你整蛊的目的。要打包成一个 exe 程序
- 前言文章抄袭在互联网中普遍存在,很多博主都收受其烦。近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制、黏贴后发布标原创屡
- Windows•安装lxml最好的安装方式是通过wheel文件来安装,http://www.lfd.uci.edu/~gohlke/pyth
- 测试环境win10python 3.5yield功能简介简单来说,yield 的作用就是把一个函数变成一个 generator,带有 yie
- 目前搜索到的方法有:np.where(‘元素')还有就是pandas的方法:df.index(‘元素')但是第二个方法的问题
- Python单元测试unittest中提供了一下四种装饰器实现测试跳过和预期故障。(使用Python 2.7.13)请查考Python手册中
- 学习目的:掌握下拉列表框的用法,并理解AutoPostBack属性; 理解IsPoskBack及用法; 初识DataTable的
- 本文实例讲述了python实现通过队列完成进程间的多任务功能。分享给大家供大家参考,具体如下:1.通过队列完成进程间的多任务import m
- python装饰器就是用于扩展原函数功能的一种函数,这个函数特殊的地方就是它的返回值也是一个函数,使用Python装饰器的一个好处就是:在不
- 前几天帮人调试一个ASP+SQL2000+IIS5.1/6.0的网站程序,调试过程中遇到的问题如下:一、 SQLServer登录 原先存在备
- 目录while语句if 语句for语句BreakContinuePass流程控制无非就是if else之类的控制语句,今天我们来看一下Pyt
- 在pycharm使用过程中,对于每次新建的python文件的时候,关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便。方法如下:1