一、基本概念
python3默认的UI工具包是tkinter.
顶层窗口: 包含具体窗口内容的容器是顶层窗口;
控件:顶层窗口上可以包含一些小的窗口组件,称之为控件;
根窗口: GUI程序可以有多个顶层窗口,但只能有一个顶层窗口是根窗口。
控件可以独立存在,也可以作为容器存在。
包含其它控件的控件被称为那些控件的父控件,而被包含的控件叫做该控件的子控件;
一个GUI程序从开始到结束是通过整套事件体系来驱动的,这种方式称为事件驱动处理;
tkinter有三种布局管理器来帮助控件集进行定位:Place,Pack,Grid;
当所有控件都摆好之后,程序就可以进入无限的主循环之中,所有其它的行为都通过回调来处理。
二、pack布局
因为UI暂时不是我学习的重点,因此这里仅记录pack布局方式。
更多内容可参考:
http://effbot.org/tkinterbook/tkinter-index.htm
pack布局管理器在行和列上对控件进行组织。你可以使用的选项包括:fill, expand, and side。
何时使用pack布局:
- 将一个控件填满其父容器控件
- 将数个控件纵向排列
- 将数个控件横向排列
示例1:
from tkinter import *
root = Tk()
listbox = Listbox(root)
listbox.pack()
for i in range(20):
listbox.insert(END, str(i))
mainloop()
默认显示,20个数字只显示出来10个,此时我们会去拖动窗口,让窗口尺寸变大。
尺寸改变之后,listbox的大小并未改变,显示效果不好:
改进如下:
listbox.pack(fill=BOTH, expand=1)
我们给pack方法给了两个参数,那么listbox的尺寸就会跟随父控件的尺寸而变化了:
示例2:
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
' a test module '
__author__ = 'TaoGuan'
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack()
w = Label(root, text="Green", bg="green", fg="black")
w.pack()
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack()
mainloop()
可以使用fill=X,让子控件与父控件等宽:
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack(fill=X)
w = Label(root, text="Green", bg="green", fg="black")
w.pack(fill=X)
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack(fill=X)
mainloop()
示例3
from tkinter import *
root = Tk()
w = Label(root, text="Red", bg="red", fg="white")
w.pack(side=LEFT)
w = Label(root, text="Green", bg="green", fg="black")
w.pack