12.1 创建GUI示例应用程序
Tkinter是Python标准GUI工具包,包含在Python标准安装中。
本章以实现简单的文本编辑器为例
1. 初探
导入模块tkinter
#导入模块并重命名为tk(为保留其命名空间,同时减少输入量)
import tkinter as tk
或
#直接导入这个模块的所有内容
from tkinter import *
创建顶层控件(主窗口)
top = Tk()
顶层控件添加标题
top.title("Simple Editor")
进入Tkinter主事件循环
mainloop()
#创建按钮(此时这个按钮是不可见的)
1 btn = Button()
#使用布局管理器(或称几何体管理器),在最简单的情况下只需使用管理器pack,即调用方法pack
2 btn.pack()
#添加文本
3 btn['text'] = 'Click me!'
#给按钮添加行为
4 def click():
5 print('I was clicked!')
6 btn['command'] = click
第3和6行可简写为
btn.config(text='Click me!', command=clicked)
第1、2、3、6行可简写为
Button(text='Click me too!', command=clicked).pack()
2. 布局
#创建除主窗口外的另一个顶级窗口
second = Topleval()
#创建Label控件,并设置父窗口为second
Label(second, text = "I'm in the socond window!").pack()
#没有提供父窗口参数时,默认将主窗口作为父控件,pack从窗口顶部开始将控件堆叠成一列,并让它们在窗口中水平居中
Label(text = "I'm in the socond window!").pack()
3. 事件处理
>>> from tkinter import *
>>> top = Tk()
>>> def callback(event):
... print(event.x, event.y)
...
>>> top.bind('<Button-1>', callback)
'4322424456callback'
其中<Button-1>是使用鼠标左按钮(按钮1)单击的事件名称。将这种事件关联到函数callback。这样,每当用户在窗口top中单击时,都将调用这个函数。向函数callback传递一个event对象,这个对象包含的属性随事件类型而异。
4. 最终的程序
from tkinter import *
from tkinter.scrolledtext import ScrolledText
def load():
with open(filename.get()) as file:
contents.delete('1.0', END)
contents.insert(INSERT, file.read())
def save():
with open(filename.get(), 'w') as file:
file.write(contents.get('1.0', END))
top = Tk()
top.title("Simple Editor")
contents = ScrolledText()
contents.pack(side=BOTTOM, expand=True, fill=BOTH)
filename = Entry()
filename.pack(side=LEFT, expand=True, fill=X)
Button(text='Open', command=load).pack(side=LEFT)
Button(text='Save', command=save).pack(side=LEFT)
mainloop()
12.2 使用其他GUI工具包
略