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(),后面的文章将介绍所有的布局管理方式,此处赞时略过

import tkinter as tk


class RootWindow(tk.Tk):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        label = tk.Label(self, text="Hello World", padx=10, pady=10)  # 默认容器为window
        label.pack()  # 默认side=tk.TOP


if __name__ == "__main__":
    my_window = RootWindow()
    my_window.mainloop()

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值,控件上的显示也会跟着改变

事件绑定类型

    控件可以绑定一些事件,这些事件类型包括一些常见的用户交互行为,只要事件发生,为控件绑定的可调用对象,即会被回调,大概了解一下常见的事件有:

  1. KeyPress 键盘的按键被按下
  2. KeyRelease 键盘的按键按下后松开
  3. Button 点击鼠标时
  4. ButtonRelease 点击鼠标后松开时
  5. Motion 鼠标的光标在控件上移动时
  6. Enter 鼠标光标进入控件时
  7. Leave 鼠标光标离开控件时
  8. MouseWheel 鼠标滑轮滚动时
  9. FocusIn 控件获得焦点时激活,例如鼠标点击输入控件开始进行输出
  10. FocusOut 控件失去焦点时激活,例如鼠标离开了输入框
  11. Configure 控件的配置发生改变,例如大小变化时激活

    实际项目中,根据需求,使用不同的事件,可以满足你的需求

提示对话框

    GUI应用中,对话框用于提示人类错误,或者询问一些人类一些基本信息,tkinter框架中自带了几个对话框供你使用,它们位于tkinter包下的messagebox模块中

ask开头的是询问对话框!

show开头的是展示信息的对话框! 

    我将在后续的文章中介绍这些对话框的使用,介绍什么时候使用什么样的对话框!

文件对话框

    用于选择本地文件路径的对话框,位于tkinter包中的filedialog模块中,即有选择目录的,也有选择文件的,后面我们每个都使用一下,

图片

    使用PhotoImage对象,只要指定了图片文件的路径,即可在应用上显示图片,默认指定文件名时,只会在当前工作目录下查找图片

画板

    Canvas的支持,可以使用通过代码绘制一些简单的图形,另外也可以和matplotlib数据可视化库结合起来使用

ttk模块

    大佬注意到tkinter模块的使用中,有一些基本需求,控件功能上满足的不够好,所以又提供了一个ttk模块,在ttk模块中提供了很多控件类,这些类有新的默认样式,当然是可以替代原先tkinter下控件类,下面有很多控件

持久化

    我们还有一些需要在程序结束后,仍然保留在磁盘里的方式,这就是数据持久化,可以使用标准库中的所有方式,如果是简单的应用配置信息,使用configparser模块即可满足需求……

单元测试

    位于tkinter包模块下,有个test包,非常值得学习,大佬是怎么做单元测试的?

设计

    做GUI应用,还是需要提前设计原型的,那么采用什么工具设计原型图比较好呢?随便你采用什么方式画出来即可

做出多复杂的应用?

    无非开发成本高一些,只要有心,我相信使用tkinter照样可以做出像样的GUI应用!

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值