用户图形界面(Tkinter)
模块tkinter
提供了一个GUI工具包
创建充当主窗口的顶级组件:
top = Tk()
# 在常规程序中, 将调用mainloop进入Tkinter主事件循环
mainloop()
创建其他空间(如果没有Tk实例, 创建控件将会实例化Tk)
Button控件和它的属性:
btn = Button()
# 修改属性(也可以在构造的时候赋值)
btn['text'] = 'Click me!'
# 事件
def clicked():
print('I was clicked!')
btn['command'] = clicked
管理布局
使用pack()
:
btn.pack()
# 将参数side设置为LEFT, RIGHT, TOP, BOTTOM指定控件停靠在哪边
# 参数fill设置为X, Y, BOTH指定空间在x轴, y轴, 和两个轴填满空间
# 参数expand指定为True可以让空间随父控件增大
# 其他参数可以通过help(Pack.config)了解
grid()
: 将控件放在不可见的表格单元格中, 可指定参数row
和colum
, 使用help(Grid.config)
获取具体参数
place()
: 指定控件的x和y坐标以及高度和宽度, 使用help(Place.config)
获取具体参数
事件处理
除了设置属性command
给按钮指定动作, 还可以使用bind
方法让控件对特定的事件进行处理
# 鼠标单击时间
>>> top = Tk()
>>> def f(event):
print(event.x, event.y)
>>> top.bind('<Button-1>', f)
'2561627454024f'
>>> 110 64
110 64
92 55
103 31
'<Button-1>'
是鼠标单击事件名称, 当用户在top中单击时, 都将向函数f传递一个对象, 对于鼠标单击时间, 它提供了x和y坐标
其他事件可通过help(Tk.bind)
获取
一个简单的文本编辑器
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('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()