《Python编程 第四版》 -第7章 图形化用户界面

本章重点内容说明:

1、循序渐进的GUI学习曲线

2、tkinter编码的替代之选

3、添加按钮和回调函数

4、添加用户定义的回调函数

5、添加多个组件

6、用类实现组件的自定义设置

接下来进行详细的说明

1、循序渐进的GUI学习曲线

先看一个简单的代码,如下:

 我们通过命令行运行,运行后结果:看到一个小窗口

 点击关闭,就会消失

这就是一个简单但是完整的Python GUI程序,这些代码是如何运作的呢?

1)第一行代码:从tkinter模块中加载一个组件类

2)第二行代码:创建该组件类的实例为标签类

3)第三行代码:在父组件中打包新标签

4)第四行代码:调用主循环,显示窗口,同时开始tkinter的事件循环

这种代码的编写不是唯一的,还有其他不同方式的选择

2、tkinter编码的替代之选

方法1:

 方法2:

 方法3:

 以上是三种不同的方法,可以同时尝试一下

运行的简单程序,会有一个窗口,这个窗口是可以缩放的,但是缩放后,文字始终保持在顶部,并没法跟着调整:

 我们可以修改代码,让文字能居中,代码调整如下:

 运行后的效果如下:

 除了调整组件的位置,也可以调整窗口的标题

代码如下:

 运行结果如下:

 说明:上面展示的代码是完整代码,保存为py格式的文件后,在命令行操作框,通过【pyhon+文件名.py】的方式运行即可,就能得到上述展示的运行结果

3、添加按钮和回调函数

 上面的简单代码示例,是添加的标签,其实添加按钮也基本一直

看一下下面的代码:

 运行后的结果:

 结果是一个很小的窗口,可以拉大,但是按钮的位置不会随着自动调整,如下:

 同样的逻辑,我们可以参考标签的设定函数来调整,上面的代码精进如下:

 该代码运行后的结果如下:同时拉长扩大

 针对上面代码,详细说明:

1)command选项设定了按钮按下去时的反应,其中root.quit是回调函数,也就是按钮按下,会调用该函数,该函数表示关闭窗口

2)pack中有三个参数:

side:表示按钮对齐的方式,LEFT就是靠左边

expand:表示按钮随着窗口的拉伸而扩大

fill:表示填充的方式,X表示水平方向,此处是水平拉伸充满空间

4、添加用户定义的回调函数

按钮的对应反应就是回调函数,回调函数可以用户自己定义

看下面的代码:

 上面这个代码,对比之前的代码,主要是增加了一个定义的函数quit(),用户自定义的,

此处按钮的回调函数command调用的就是quit,所以运行的结果就是,如果点击按钮,就会运行quit函数

然后回打印出来其中的文字,点击按钮后的结果,如下:

 lambda回调处理器

针对上面的函数,我们可以再精简,使用lambda来表示,代码如下:

 5、添加多个组件

首先我们先看一个代码示例及运行效果,完整代码如下:

 代码运行结果:

 通过这段代码,我们发现与之前的不同之处就是使用了Frame

Frame组件是其它组件的容器,所以先有了一个容器,才能放下其他多个不不同的容器

在创建组件的时候,第一个参数对应Frame容器,就表示把该组件放到该容器中

上面暂时的代码,在Frame容器win中,放了Label、Button两种组件,一共3个组件,从运行结果也能看得出来

多个组件会涉及到布局的问题,也就是如何放置的问题

对应布局的参数是side,通过指定该参数就会有不同的布局,我们的示例代码中使用了TOP、LEFT、RIGHT三种布局方位,通过运行结果也能对应看得出来

6、用类实现组件的自定义设置

首先看一个用类来实现组件的代码示例:

 代码运行结果:

 上面代码,首先通过继承Button类来创建来子类,子类中使用来部分父类的功能,但是同时它也自己定义了属于自己的一些功能,例如callback函数的调用

使用类来创建组件,其实主要是因为可以标准化行为和外观,也就是说,如果一旦确认了,就可以通过继承的方式,把很大一部分没变的直接继承使用,而且方便

这样就可以通过类来复用GUI部件

原文地址:https://www.cnblogs.com/zhangjiyou/p/13817838.html