Python-tkinter库

python 在我的日常使用中更多是作为粘合剂的形式,比如配合测试,统计整理数据等等的脚本,但是,当脚本需要输入过多参数的时候,在使用的时候就显得很麻烦了,所以引入图形化界面,由使用者输入这种形式的重要性就体现出来了

所以我们使用的图像化库只需要有以下几个功能即可:

  • GUI库需要自带的控件
    • 显示文本的标签
    • 支持文本输入的控件
    • 按钮
    • 弹窗
    • 提供展示结果的一些例如列表,富文本等的控件
  • 不需要特别复杂的界面布局控制,有栅格化布局就行
  • 在 windows 和 linux 下都能正常使用

结合上面的需求,所以 tkinter 是一个比较合适的选择的

Tkinter 简介

TkinterPython 的标准 GUI 库,这意味着,只要安装了 Python, 它就自带这个库,不用再额外下载安装 pip install

看一下下面的 demo, 先对使用 Tkinter 有个大致了解 ( 我的 Python 版本是 3.6.2,其中自带的 Tkinter 版本是 8.6

// 导入库
import tkinter
mainwindow = tkinter.Tk()
label = tkinter.Label(mainwindow, text="Hello World!")
label.pack()
mainwindow.mainloop()

上面这几行代码,可以弹出一个下面这样的界面

demo

Tkinter 写一个界面大致流程:

  • 定义一个主界面的窗口 mainwindow = tkinter.Tk()
  • 添加需要的控件,比如显示文本的标签,文本输入框,按钮等等
    • 初始化控件的各种属性,比如它的长宽,背景色,线条等等,不能少的是它属于哪一个父容器
    • 以某种布局方式放在这个父容器中 ( pack(), grid(), place())
  • 最后 mainwindow.mainloop() 来呈现窗口

实际开发过程中,使用到的控件可能特别多,布局也会更复杂,所以接下来主要就是介绍控件和布局管理

控件

Tkinter 一共提供了将近20种控件,十分丰富,但是这篇文章先对我常用的控件进行总结,后面在解析源码的时候,会完整介绍所有的控件

主窗口

我们的主窗口是通过 tkinter.Tk() 生成, 对于主窗口,一般常用的接口如下:

函数 描述 备注
geometry(newGeometry=None) 设置窗口大小和位置 输入的格式widthxheight+x+y(字符串)
注意:widthheight中间的是字母x不是*
+x+y 是设置窗口显示时候的相对于屏幕左上角的位置,可以不写
maxsize(width=None, height=None) 设置窗口最大尺寸 输入参数2个都是整型
minsize(width=None, height=None) 设置窗口最小尺寸 输入参数2个都是整型
resizable(width=None, height=None) 固定窗口尺寸 输入参数2个都是整型
title(string=None) 设置窗口的名称 字符串

Label

Label 的定位就是可以展示文本和位图的控件,它涉及的可以参数很多,这些参数都是可选项,主要就是对 Label 的某个属性进行设置

参数 描述 输入值
height 标签的高 int
width 标签的宽 int
state 设置组件状态 normal,disabled,active
activebackground state = active 时的背景颜色 颜色英文单词或者形如 #FF0000 的字符串
activeforeground state = active 时文字和图像颜色 同上
disabledforeground state = disabled 时文字和图像颜色 同上
background or bg 标签的背景色 同上
foreground or fg 设置文本与图像颜色 同上
highlightbackground 没有焦点时高亮边框的颜色 同上
highlightcolor 获得焦点时高亮边框的颜色 同上
highlightthickness 高亮边框的宽度 int
anchor 文本或图像在标签里的位置 n, s, e, w, nw, sw, se, ne, center(默认为center
其实就是:上北下南左西右东
bitmap 图标
borderwidth or bd 边框宽度 int
compound 控制文本与图像/图标的显示状态 nonebottomtopleftrightcenter (默认none, 显示位图或图像(如果已定义)而不是文本)
cursor 设置鼠标移动到标签时的形状
font 设置标签文本字体 tk中提供了一个 font 的类,可以单独设置字体的 family, size, weight, slant, underline, overstrike
image 图像 PhotoImageBitmapImage,或者能兼容的对象,优先级高于 textbitmap
justify 显示多行文本时的对齐方式 left, centerright
padx,pady 水平、垂直方向的边距 int
relief 标签的 3-D 样式效果 raised, sunken, flat, ridge, solidgroove
takefocus 设置标签是否接受输入焦点 布尔型
text 在标签上显示的文本信息 string
textvariable 为标签设置一个 StringVar()对象 如果变量值被修改,标签上的文本会自动更新
underline 指定字符下划线 默认值是 -1,例如设置为 0,则第 1 个字符处画下划线, 常用于表示键盘快捷键
wraplength 自动换行下指定的最大行长 int

我写几个例子,尽量多的使用到上面的参数

Entry

Button

布局管理

布局管理,也分为3种

布局管理 描述
pack() 包装
grid() 网格
place() 位置

https://docs.python.org/zh-cn/3/library/tkinter.ttk.html

https://github.com/shengqiangzhang/examples-of-web-crawlers

https://www.cnblogs.com/shwee/p/9427975.html

https://docs.python.org/3.5/library/tk.html

https://sunhwee.com/