出于自己的小爱好和小需求,需要用到Python GUI编程,可是看网上的教程并不全面,英文有不好,看得费劲,所以自己找了一些文章综合归纳起来,理一理自己的思路,便于自己学习参考。
如果有不对的地方还请及时指出,感谢!
一、基本概念
tkinter是python内置的编写GUI的库,无需安装,可以直接从python中导入:
from tkinter import *
或者import tkinter an tk
导入tkinter之后,可以调用tkinter.TkVersion
来查看tkinter的版本,一般8.5以上的版本功能都是比较健全了。
二、建立窗口
1. 基本窗口
import tkinter as tk
myWindow = tk.Tk()
myWindow.mainloop()
实际上就是实例化tkinter中的Tk,然后调用mainloop()函数。可以得到如下窗口。
2.窗口的属性
方法名称 | 说明 |
---|---|
title() | 设置窗口标题,默认为tk |
geometry("widthxheight+x+y" | 设置窗口的宽、高和位置,单位为像素 |
maxsize(width,height) | 窗口缩放时的最大宽和高 |
minsize(width,height) | 窗口缩放时的最小宽和高 |
configure(bg="color") | 窗口的背景颜色 |
resizable(True,True) | 设置是否可以更改窗口大小,第一个参数是宽,第二个是高,设置锁定窗口大小,则设置resizeable(0,0) |
state("zoomed") | 最大化窗口 |
iconify() | 最小化窗口 |
iconbitmap("xx.ico") | 更改默认窗口图标 |
推荐自己亲自试试。
3.设置窗口
tkinter模块中有两个可以获取当前屏幕大小的函数
winfo_screenwidth()------可以获取当前屏幕宽度
winfo_screenheight()------可以获取当前屏幕高度
下面是一个获取屏幕大小,然后使我们的窗口始终置于屏幕中央的小栗子:
# 获取屏幕大小,使窗口始终置于屏幕中央
import tkinter as tk
myWindow = tk.Tk()
screenWidth = myWindow.winfo_screenwidth()
screenHeight = myWindow.winfo_screenheight()
w = 500
h = 400
x = (screenWidth - w)/2
y = (screenHeight - h)/2
myWindow.geometry("%dx%d+%d+%d" % (w,h,x,y))
myWindow.mainloop()
二、窗口的组件(Widget)
1.Tkinter的基本组件
Tkinter类 | 组件名称 |
---|---|
Label | 标签 |
Button | 按钮 |
Entry | 文本框 |
Radiobutton | 单选按钮 |
Checkbutton | 多选按钮 |
Frame | 框架 |
LabelFrame | 标签框架 |
Toplevel | 上层窗口 |
Scale | 滑动条 |
Spinbox | 可微调输入控件 |
Message | 消息 |
Listbox | 列表框 |
Scrollbar | 滚动条 |
OptionMenu | 下拉式菜单 |
PanedWindow | 面板 |
Menu | 菜单 |
Text | 文字区域 |
Canvas | 画布 |
2.Tkinter.ttk 的组件
由于Tkinter中的组件比较丑,无法满足人民日益增长的审美需求,所以Tkinter在后来引入了ttk作为补充(主要就是进行了包装、美化),并使用了强大的Combobox取代了原来的Listbox,新增了部分现在常用的组件。
ttk继承的组件
Tkinter类和ttk类都有 | 组件名称 |
---|---|
Label | 标签 |
Button | 按钮 |
Entry | 文本框 |
Radiobutton | 单选按钮 |
Checkbutton | 多选按钮 |
Frame | 框架 |
LabelFrame | 标签框架 |
Scale | 滑动条 |
Scrollbar | 滚动条 |
PanedWindow | 面板 |
Menu | 菜单 |
ttk新增的组件
Tkinter.ttk类 | 组件名称 |
---|---|
Combobox | 组合框 |
LabeledScale | 带标签的滑动条 |
Notebook | 多文档窗口 |
Progressbar | 进度条 |
Separator | 分割线 |
Treeview | 树 |
3. 导入ttk模块
最简单的
from tkinter import ttk
由于部分ttk组件与tkinter组件一样,而且更好看,所以可以考虑覆盖原有的tkinter组件:
from tkinter import *
from tkinter.ttk import *
使用ttk,不仅更好看,还能跨平台使用,但是并没有100%兼容。
比如,fg、bg参数或一些外观相关的参数tk和ttk是不相同。ttk使用的是ttk.Style类别。
4.组件的通用属性
通用的属性 | 含义 |
---|---|
Dimensions | 大小 |
Colors | 颜色 |
Fonts | 字形 |
Anchor | 指定组件内的信息 |
Relief styles | 属性边框 |
Bitmaps | 显示位图 |
Cursors | 鼠标外形 |
Command | 关联的命令方法 |
5.组件的通用方法
通用的方法 | 参数 |
---|---|
Configuration | config(option=value):可以在建立时设置,也可以在程序执行时使用config( )重新设置。cget("option"):取得option参数值。keys( ):可以用此方法获得所有该Widget的参数 |
Event Processing | mainloop( ):让程序继续执行,同时进入等待与处理窗口事件。quit( ):Python Shell窗口结束,但是所建窗口继续执行。update( ):更新窗口画面 |
Event callbacks | bind(event,callback):事件绑定。unbind(event):解除绑定 |
Alarm handlers | 间隔指定时间后调用callback( )方法 |