Python——图形用户界面

一.创建GUI示例应用程序

一个微型的文本编辑器有四个需求:
1.让用户能够打开指定的文本文件
2.让用户能够编辑文本文件
3.让用户能够保存文本文件
4.让用户能够退出。

1.初探

首先要导入tinter。为保留命名空间的同时减少输入量,可能需要将其重命名。

>>>import tkinter as tk

也可以导入该模块的所有内容

>>>from tkinter import *

要创建GUI,先创建一个将充当主窗口的控件。为此,可以实例化一个Tk对象。

>>>top=Tk()

这时会出现一个窗口,在常规程序中,我们将调用函数mainloop来进入Tkinter主事件循环。在交互式解释器中并不需要这样做。
要创建按钮,可以实例化Button类。若没有Tk实例,创建控件也将实例化Tk,所以可直接创建控件,先不实例化Tk

>>>from tkinter import *
>>>btn=Button()

现在并不能直接看到按钮,还需要使用**布局管理器(或几何体管理器)**来告诉Tkinter将它放在何处。在最简单的情况下只需要调用方法pack

>>>btn.pack

控件包含各中属性,可以使用它们来修改控件的外观和行为
如:

>>>btn['text']='Click me!'
#给按钮添加行为
>>>def clicked():
...		print('I was clicked!')
...
>>>btn['command']=clicked		

现在单击按钮,将会看到指定的信息被打印出来。
可以使用方法config同时设置多个属性

>>>btn.config(text='Click me!',command=clicked)

或者使用控件的构造函数来配置控件

Button(text='Click me too!',command=clicked).pack()

2.布局

对控件调用方法pack时,会把控件放在主控件中。要指定主控件,可使用构造函数的第一个可选参数;若没有指定,将把顶级主窗口用作主控件。

Label(text="I'm in the first window!").pack()
second=Toplevel()
Label(second,text="I'm in the first window!").pack()

Toplevel类表示除主窗口外的另一个顶级窗口,而Label就是文本标签。
不提供任何参数时,pack从窗口顶部将控件堆叠成一列,并让它们在窗口中水平居中。所幸可以调整控件的位置和拉伸方式。要指定将控件停靠在哪一条边上,可以将参数side设置为LEFT、RIGHT、TOP、BOTTOM。要让控件在x或y方向上填满分配给它的空间,可以将参数fill设置为x,y,BOTH。要让控件随父控件(窗口)一起增大,可以将参数expand设置为True。
要了解可用的选项,可执行如下命令:

>>>help(Pack.config)

grid和place也是布局管理器。
方法grid让你能够这样排列控件:将它们放在不可见的表格单元格中。为此需要指定参数row和column,也有可能需要指定参数rowspan或columnspan——控件横跨多列或多行的情况下。
方法place可以让你手动放置控件——通过指定控件的x和y坐标以及高度、宽度来做到。

3.事件处理

通过设置属性command赋予按钮指定动作,这就是一种事件处理,一种特殊的事件处理。
Tkinter提供了通用的事件处理机制——方法bind
处理特定的事件,在调用方法bird时,要同时指定事件的名称和要使用的函数。
示例:

>>>from tkinter import *
>>>top=TK()
>>>def callback(event):
...		print(event.x,event.y)
...
>>>top.bind('<Button-1>',callback)
'4322424456callback'

<Button-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=LEET,expand=True,fill=X)
>>>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()

#运行结果

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值