Python 图形界面框架TkInter之在源码中找pack方法

 更新时间:2022年03月22日 09:36:50   作者:叫我王员外就行  
这篇文章主要介绍了Python 图形界面框架TkInter之在源码中找pack方法,根据不同的需求,选择对应的布局方式,每个控件都可以使用pack作为布局管理,下面我们就来看看从源码中找pack()在哪里,需要的朋友可以参考下

前言:

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本身的configconfigure方法存在冲突,会优先调用修改Label本身属性值的config、configure方法

  • 3、直接在源码中查看pack()的使用方式,不必再查询API文档

所有的pack()方法中,可以使用的关键字参数

到此这篇关于Python 图形界面框架TkInter之在源码中找pack方法的文章就介绍到这了,更多相关在源码中找pack方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • django模型查询操作的实现

    django模型查询操作的实现

    一旦创建好了数据模型,Django就会自动为我们提供一个数据库抽象API,允许创建、检索、更新和删除对象操作,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-08-08
  • Python之变量类型和if判断方式

    Python之变量类型和if判断方式

    这篇文章主要介绍了Python之变量类型和if判断方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python PyJWT库简化JSON Web Token的生成与验证

    Python PyJWT库简化JSON Web Token的生成与验证

    PyJWT库为Python开发者提供了简便的生成和验证JWT的工具,本文将深入介绍PyJWT库的核心概念、功能以及实际应用,通过丰富的示例代码,帮助大家更全面地了解和应用这一强大的JWT库
    2023-12-12
  • python实现电脑操控安卓手机

    python实现电脑操控安卓手机

    网上虽然有很多教程,但是随着版本的更新总有各种各样的坑,本文以亲身踏坑经历介绍了电脑使用python操控安卓手机,从安装到使用方法,感兴趣的可以了解一下
    2021-05-05
  • Pandas使用Merge与Join和Concat分别进行合并数据效率对比分析

    Pandas使用Merge与Join和Concat分别进行合并数据效率对比分析

    这篇文章主要给大家介绍了关于pandas中DataFrame数据合并连接(merge、join、concat)的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Python异常学习笔记

    Python异常学习笔记

    这篇文章主要介绍了Python异常学习笔记,本文着重讲解了如何自定义一个异常,需要的朋友可以参考下
    2015-02-02
  • python中去空格函数的用法

    python中去空格函数的用法

    这篇文章主要介绍了python中去空格函数的用法,很实用的技巧,需要的朋友可以参考下
    2014-08-08
  • 使用Matlab将矩阵保存到csv和txt文件

    使用Matlab将矩阵保存到csv和txt文件

    这篇文章主要介绍了使用Matlab将矩阵保存到csv和txt文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python爬取本站电子书信息并入库的实现代码

    python爬取本站电子书信息并入库的实现代码

    这篇文章主要介绍了python爬取本站电子书信息并入库的实现代码,需要的朋友可以参考下
    2020-01-01
  • 对python3 中方法各种参数和返回值详解

    对python3 中方法各种参数和返回值详解

    今天小编就为大家分享一篇对python3 中方法各种参数和返回值详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论