| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python 图形界面框架TkInter(第一篇:Python写GUI应用简介) -> 正文阅读 |
|
[Python知识库]Python 图形界面框架TkInter(第一篇:Python写GUI应用简介) |
(备注:本文基于Python3.x) 前言? ? TkInter是Python用于开发GUI界面的标准库,如果你想快速开发一个带有GUI界面的小工具(笑小程序),且又能同时在Linux、Windows、Mac上使用,TkInter天生支持跨平台,天生具备稳定性,我认为它能满足内部工具的简单需求,当然它的底层是Tcl/Tk,先用起来再说,另外Python毕竟是面向对象语言,所以全文会使用到class和对象,尽量日后能满足开发项目的需求。 (备注:Tcl/Tk 是一种简明,高效,可移植性好的编程语言。在信息产业领域具有广泛的应用。) Hello World? ? 从Hello World写起,涉及到一个简单的文本控件Label,创建的每个控件都需要指定一个放置它的容器,此处我们将其显示在一个Window上,另外也使用了一种布局方式pack(),后面的文章将介绍所有的布局管理方式,此处赞时略过
1、首先导入tkinter模块(tkinter是一个python包模块对象),然后使用别名tk指向tkinter模块对象,这是为了少写几个字符而已,你也可以不使用别名功能 2、接着我们创建RootWindow类,该类必须继承tkinter模块下的Tk类,Tk类产生的每个对象,表示GUI应用中的一个Window 3、主模块作为脚本执行时,会先创建RootWindow对象(备注:由于RootWindow是Tk类的子类对象,所以等同于创建一个Tk对象,这是面向对象中,is a 的概念) 4、接着调用Tk对象的mainloop()方法,这会让当前应用的主线程一直在事件循环中,这样的话,程序不会退出,你就能一直在图形界面上看到这个应用了? ? ? 下面是在Windows系统上的的效果(当然你也可以运行在Mac、Linux上,外观略有不同) ? ? ?Hello World的文本位于一个叫做Label的控件中,Label控件类位于tkinter包中,Label类是Widget的子类,产生的每个Label对象都表示一个文本控件,我们在创建Label对象时,必须传入一个容器对象,表示这个控件依附(放置或关联)在哪个容器中,几乎所有的前端技术都会涉及到的技术点,就是控件树的概念(页面中的控件都是树形结构) ? ? 另外又调用了Label的pack()方法,这个pack()方法表示布局方式,也称作布局管理器,pack这种布局方式,只能水平或者垂直的摆放控件,类似于Android中的LinearLayout,当开发复杂界面的时候,往往使用会使用嵌套使用布局管理器的方式,在后面文章中,你将学习如何嵌套布局管理器而去制作复杂的页面…… 窗口? ? tkinter框架中,表示窗口的对象,可以使用tkinter包模块下的Tk对象作为根窗口,而那些子Window(备注:打开一个主页面,再通过主页面打开的页面,就叫做子页面),则可以使用tkinter包模块下的Toplevel……后面我们会详细介绍它们 Tk 位于tkinter包中,产生的对象表示一个根窗口 Toplevel 也位于tkinter包中,产生的对象表示一个子窗口 控件? ? 自带了很多控件类,它们几乎都是Widget的子类,使用时,只需要创建控件对象即可,后面我们会详细介绍每一种控件,这里简单提及Label、Button、ListBox、Radiobutton等等 容器? ? 如果需要将多个控件组合在一起作为一个整体使用,那么tkinter包模块下的Frame就可以作为它们的容器,在实际项目中,我们会大量的使用Frame去组合控件,其实Frame也算做控件,只不过它的作用是包含其他控件而已。(备注:LabelFrame也是容器类,也可以用于包含控件) 布局方式? ? 除了Hello World中提及的pack()方式、还有常用的grid()与 place()方式,它们也被称作布局管理器,专门用于管理控件如何摆放,日后我们的代码里会经常用到这3个布局方式,还有一个布局管理方式Panedwindows,也是根据需求情况去使用 双向绑定的数据对象? ? 它们全部作为位于tkinter包模块下的Variable类的子类而存在,包括IntVar、StringVar、BooleanVar、还有一个单独的Var,它们可以和某个控件绑定在一起,实现双向绑定 ? ? 双向绑定:当改变控件的值、对应的Var值会改变;当改变Var值,控件上的显示也会跟着改变 事件绑定类型? ? 控件可以绑定一些事件,这些事件类型包括一些常见的用户交互行为,只要事件发生,为控件绑定的可调用对象,即会被回调,大概了解一下常见的事件有:
? ? 实际项目中,根据需求,使用不同的事件,可以满足你的需求 提示对话框? ? GUI应用中,对话框用于提示人类错误,或者询问一些人类一些基本信息,tkinter框架中自带了几个对话框供你使用,它们位于tkinter包下的messagebox模块中 ask开头的是询问对话框! show开头的是展示信息的对话框!? ? ? 我将在后续的文章中介绍这些对话框的使用,介绍什么时候使用什么样的对话框! 文件对话框? ? 用于选择本地文件路径的对话框,位于tkinter包中的filedialog模块中,即有选择目录的,也有选择文件的,后面我们每个都使用一下, 图片? ? 使用PhotoImage对象,只要指定了图片文件的路径,即可在应用上显示图片,默认指定文件名时,只会在当前工作目录下查找图片 画板? ? Canvas的支持,可以使用通过代码绘制一些简单的图形,另外也可以和matplotlib数据可视化库结合起来使用 ttk模块? ? 大佬注意到tkinter模块的使用中,有一些基本需求,控件功能上满足的不够好,所以又提供了一个ttk模块,在ttk模块中提供了很多控件类,这些类有新的默认样式,当然是可以替代原先tkinter下控件类,下面有很多控件 持久化? ? 我们还有一些需要在程序结束后,仍然保留在磁盘里的方式,这就是数据持久化,可以使用标准库中的所有方式,如果是简单的应用配置信息,使用configparser模块即可满足需求…… 单元测试? ? 位于tkinter包模块下,有个test包,非常值得学习,大佬是怎么做单元测试的? 设计? ? 做GUI应用,还是需要提前设计原型的,那么采用什么工具设计原型图比较好呢?随便你采用什么方式画出来即可 做出多复杂的应用?? ? 无非开发成本高一些,只要有心,我相信使用tkinter照样可以做出像样的GUI应用! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 14:43:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |