python桌面开发:tkinter基础知识科普,也许你想学习的知识这里都有
Posted dhjabc_1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python桌面开发:tkinter基础知识科普,也许你想学习的知识这里都有相关的知识,希望对你有一定的参考价值。
好吧,写了这么多关于python桌面开发的博文,今天终于开始回过头来,把tkinter的基础知识进行科普一下了。
一路走来,不容易! 贵在持之以恒
OK,这篇大而全的科普文章,经过整理和参考多方的资料,终于完工了。可喜可贺!在此也感谢前辈的努力和分享!
下面正式进入正题:tkinter基础知识科普,也许你想学习的知识这里都有
文章目录
一、什么是GUI
GUI,是 Graphics User Interface(图形用户界面)的缩写。在 GUI 中,并不只是输入文本和返回文本,用户可以看到窗口、按钮、文本框等组件,还可以通过鼠标和键盘操作应用。
GUI 是程序交互的一种不同的方式,使用 GUI 开发的程序,和命令行程序一样,都具有输入数据、处理数据和输出数据这3个基本要素,只不过,使用 GUI 开发的程序,它们的输入和输出方式更丰富,更有趣。
二、 PYTHON的GUI库
Python GUI 常用库
库名 | 特点 |
---|---|
wxPython | wxPython 是一个跨平台的 GUI 工具集,以流行的 wxWidgets(原名 wxWindows)为基础,提供了良好的跨平台外观。简单来说,wxPython 在 Windows上调用 Windows 的本地组件、在 Mac OS 上调用 Mac OS X 的本地组件、在 Linux 上调用 Linux 的本地组件,这样可以让 GUI 程序在不同的平台上显示平台对应的风格。wxPython 是一个非常流行的跨平台的 GUI 库。其官方网址是http://www.wxpython.org/。 |
PyQt | PyQt 是 Python 编程语言和 Qt 库的成功融合。Qt 本身是一个扩展的 C++ GUI 应用开发框架,Qt 可以在 UNIX、Windows 和 Mac OS X 上完美运行,因此 PyQt 是建立在 Qt 基础上的 Python 包装。所以 PyQt 也能跨平台使用。 |
PyGTK | PyGTK 基于老版本的 GTK+2 的库提供绑定,借助于底层 GTK+2 所提供的各种可视化元素和组件,同样可以开发出在 GNOME 桌面系统上运行的软件,因此它主要适用于 Linux/UNIX 系统。PyGTK 对 GTK+2 的 C 语言进行了简单封装,提供了面向对象的编程接口。其官方网址是http://www.pygtk.org/。 |
Pywin32 | Windows Pywin32 库允许我们像 VC 一样的形式使用 Python 开发 win32 应用。 |
Kivy | Kivy 是一个开源库,它能够让使用相同源代码创建的程序实现跨平台运行。同时,Kivy 主要关注创新型用户界面开发,例如多点触摸应用程序。 |
Flexx | Flexx 是一个纯 Python 工具包,可以用来创建图形化界面程序,还支持使用 Web 技术进行界面的渲染。 |
三、 什么是tkinter
Tkinter 是 Python 标准 GUI 库,其最初是为 Tcl(这是一门工具命令语言,而不是某个电视机品牌)设计的,由于其良好的可移植性和灵活性,加上非常容易使用,因此逐渐被移植到很多脚本语言中,包括 Perl、Ruby 和 Python。
本章就来重点介绍 Tkinter 库。由于它是 Python 自带的 GUI 库,因此无须进行额外的下载安装,只要导入 tkinter包即可。
(一) 容器+组件的设计思维
任何GUI界面都可被分解成一个空的容器,容器里盛装了大量的基本组件,通过设置这些基本组件的大小、位置等属性,就可以将该空的容器和基本组件组成一个整体的窗口。
实际上,图形界面编程非常简单,它非常类似于小朋友玩的拼图游戏,容器类似于拼图的“母板”,而普通组件(如 Button、Listbox 之类的)则类似于拼图的图块。创建图形用户界面的过程就是完成拼图的过程。
(二) 多重继承的架构模式
由于这些组件之间存在错综复杂的继承关系,因此先通过类图来了解各 GUI 组件,以及它们之间的关系。Tkinter 的GUI 组件之间的继承关系如图所示。
1. 根父类Misc和Wm
Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
Misc:它是所有组件的根父类。
Wm:它主要提供了一些与窗口管理器通信的功能函数。
对于 Misc 和 Wm 两个基类而言,GUI 编程并不需要直接使用它们,但由于它们是所有 GUI 组件的父类,因此 GUI 组件都可以直接使用它们的方法。
2. 子类 Tk
Misc 和 Wm 派生了一个子类 Tk,它代表应用程序的主窗口。因此所有 Tkinter GUI 编程通常都需要直接或间接使用该窗口类。
3. 组件基类 BaseWidget
BaseWidget 是所有组件的基类,它还派生了一个子类 Widget。Widget 代表一个通用的 GUI 组件,Tkinter 所有的 GUI 组件都是 Widget 的子类。
再来看 Widget 的父类。Widget 一共有四个父类,除 BaseWidget 之外,还有 Pack、Place 和 Grid,这三个父类都是布局管理器,它们负责管理所包含的组件的大小和位置。
4. UI组件
剩下的就是图右边所显示的Widget 的子类了,它们都是Tkinter GUI编程的各种 UI 组件,也就是前面所说的各种“积木块”。表中简单介绍了各 GUI 组件的功能。
四、 一个入门案例
此处只是简单地介绍了这些 GUI 组件,读者有一个大致印象即可,先不用太熟悉它们。下面通过一个简单的例子来创建一个窗口:
# Python 2.x使用这行
#from Tkinter import *
# Python 3.x使用这行
from tkinter import *
# 创建Tk对象,Tk代表窗口
root =Tk()
# 设置窗口标题
root.title('窗口标题')
# 创建Label对象,第一个参数指定该Label放入root
w =Label(root, text="Hello Tkinter!")
# 调用pack进行布局
w.pack()
# 启动主窗口的消息循环
root.mainloop()
上面程序主要创建了两个对象 Tk 和 Label。其中 Tk 代表顶级窗口,Label 代表一个简单的文本标签,因此需要指定将该 Label 放在root容器内。
五、 配置方法
配置 GUI 组件的方法有以下 3 种:
以关键字参数的方式配置。例如 Button(self, text=“确定”),其中 text = “确定” 就指定了该按钮上的文本是“确定”。
#创建Button 对象,在创建时就配置它的文本和背景色
okButton =Button(self, text ="确定", background ='yellow')
以字典语法进行配置。例如 okButton[‘background’]=‘yellow’,这种语法使得 okButton 看上去就像一个字典,它用于配置 okButton 的 background 属性,从而改变该按钮的背景色。
okButton ['text']= '确定'
以configure方式进行配置:
okButton.configure(text = '确定')
六、 控件的共同属性
在窗体上呈现的可视化控件,通常包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等共同属性。不同的控件由于形状和功能不同,又有其特征属性。在初始化根窗体和根窗体主循环之间,可实例化窗体控件,并设置其属性。父容器可为根窗体或其他容器控件实例。常见的控件共同属性如下表:
七、 查看帮助文档
help(tkinter.Button.__init__)
:查看 Button 的构造方法的帮助文档,Button 支持两组选项:标准选项(STANDARD OPTIONS)
和组件特定选项(WIDGET-SPECIFIC OPTIONS)
。
- Grid 支持的选项,可以通过执行
help(tkinter.Label.grid)
命令查看(执行此命令之前,一定要先引入 Tkinter 包)。 - pack 布局管理器支持的选项,可以通过
help(tkinter.Label.pack)
命令来查看,有兴趣的读者可自行查看。 - place() 方法支持的所有选项,可通过执行
help(tkinter.Label.place)
命令查看(一定要先导入 Tkinter 包)。
八、事件处理
前面介绍了如何放置各种组件,从而得到了丰富多彩的图形界面,但这些界面还不能响应用户的任何操作。比如单击窗口上的按钮,该按钮并不会提供任何响应。这就是因为程序没有为这些组件绑定任何事件处理的缘故。
(一) command方法
简单的事件处理可通过 command 选项来绑定,该选项绑定为一个函数或方法,当用户单击指定按钮时,通过该 command 选项绑定的函数或方法就会被触发。下面程序示范了为按钮的 command 绑定事件处理方法:
(二) bind方法
上面这种简单的事件绑定方式虽然简单,但它存在较大的局限性:
程序无法为具体事件(比如鼠标移动、按键事件)绑定事件处理方法。
程序无法获取事件相关信息。
为了弥补这种不足,Python 提供了更灵活的事件绑定方式,所有 Widget 组件都提供了一个 bind() 方法,该方法可以为“任意” 事件绑定事件处理方法。
下面先看一个为按钮的单击、双击事件绑定事件处理方法的示例:
九、 Variable变量处理
Tkinter 支持将很多 GUI 组件与变量进行双向绑定,执行这种双向绑定后编程非常方便:
• 如果程序改变变量的值,GUI 组件的显示内容或值会随之改变。
• 当 GUI 组件的内容发生改变时(比如用户输入),变量的值也会随之改变。
为了让 Tkinter 组件与变量进行双向绑定,只要为这些组件指定 variable(通常绑定组件的 value)、textvariable(通常绑定组件显示的文本)等属性即可。
但这种双向绑定有一个限制,就是 Tkinter不允许将组件和普通变量进行绑定,只能和 tkinter 包下 Variable 类的子类进行绑定。该类包含如下几个子类:
• ShringVar():用于包装str 值的变量。
• IntVar():用于包装整型值的变量。
• DoubleVar():用于包装浮点值的变量。
• BooleanVar():用于包装bool值的变量。
对于 Variable 变量而言,如果要设置其保存的变量值,则使用它的 set() 方法;如果要得到其保存的变量值,则使用它的 get() 方法。
下面程序示范了将 Entry 组件与 StringVar 进行双向绑定,这样程序既可通过该 StringVar 改变 Entry 输入框显示的内容,也可通过该 StringVar 获取 Entry 输入框中的内容。
先写到这里,后续将持续更新。
欢迎持续关注,感谢支持!
以上是关于python桌面开发:tkinter基础知识科普,也许你想学习的知识这里都有的主要内容,如果未能解决你的问题,请参考以下文章