文章目录
简述
最近有需要通过Python写一个GUI程序。由于时间有限,并且对界面的要求并不高,于是还是选择了Python自带的tkinter库来实现GUI。感觉确实很好上手,在此把一些tkinter的主要用法记录下来备忘。
tkinter也并不是Python语言的一部分,其本质上是对接到Python的Tcl/Tk。因此先简单了解一下Tcl/Tk。这里的Tcl也不是那个买电视机的TCL,而是工具命令语言(Tool Command Language)的简称。这也是一门很好学的脚本语言,主要用于快速原型开发和GUI编程。而Tk就是指Tcl中的GUI工具包。
一般Python都安装了tkinter库,可以通过python -m tkinter
查看安装的tkinter版本。
基本用法
既然是GUI,首先就需要一个主窗口,tkinter.Tk
类就实现了这个主窗口的创建。一个最简单的tkinter程序如下:
import tkinter as tk
root = tk.Tk()
# 在此之间定义添加各种组件以及各种事件和回调
root.mainloop()
首先通过创建tkinter.Tk
类的一个实例创建主窗口,之后就需要调用该类的mainloop
方法,将该窗口展示出来并hold住Python脚本,直到将主窗口关闭。
Python与Tcl/Tk
将主窗口建立起来之后自然就是向里面添加各种GUI组件。Python官方虽然提供了Tk图形用户界面的教程,但也没有提供Tk所有组件的详细文档。因此想要查看Tk某个组件的某个详细信息还是要去查看Tcl/Tk的官方文档,但打开Tcl/Tk按钮组件的官方文档看了一眼,直接一脸懵逼。毕竟Tcl也是一门脚本语言,其风格与Python也并不一样。因此还是要找出Python与Tk用法的对应关系,才好一边看着Tcl/Tk的文档,一边写着Python。还好Python官方文档也总结了Tcl/Tk与Python的对应关系。
首先就是创建组件,Tk中的命令形式为:classCommand pathname options
。classCommand
就是指组件的名称;pathname
就是指组件的路径名称,由于组件都是层级结构,因此通过.
分割表示组件之间的从属关系,并且开头必须使用.
用于表示根部主窗口组件;最后就是该组件的各种配置,形式就类似命令行-key value
。例如button .btn -fg red -text 'click me'
,就表示创建了一个从属于主窗口的名为btn
的按钮,配置其字体颜色为红色,按钮上的文字是’click me’。
在Python中,自然就是通过实例化各种类来实现组件的创建。各组件的在初始化时的第一个参数master
就指明了该组件的父组件;name
属性就指明了该组件的名称;之后就可以通过关键字参数的形式设置该组件的各种属性。如上面Tk命令行在Python中就是btn = tkinter.Button(root, name='btn', fg='red', text='click me')
。
参考资料
- Tcl/Tk官网API:https://www.tcl.tk/
- Tcl/Tk 8.6 Documentation:https://www.tcl.tk/man/tcl8.6/contents.htm
- Python 3.7官方tkinter教程:https://docs.python.org/zh-cn/3.7/library/tk.html