图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。
与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
用户界面是我们使用者和计算机交互的一种方式,我们日常会使用到的QQ登录界面,QQ聊天界面,这些都属于图形用户界面。
Python作为一种跨平台的强大语言,当然是可以进行图形界面的开发,在开发的过程中,由于第三方库的存在,有多种模块供我们选择。
模块名 | 说明 |
Tkinker | Tkinter是一种标准的接口,这个模块存在于Python内部中供我们使用,它是一个轻量级的跨平台工具 |
wxPython | wxPython是一种较为流行的GUI模块 |
Flexx | 倾向于web方面的模块 |
Kivy | Kivy是开源Python函式库,用于开发行动应用程序和其它采用自然用户界面的多点触控应用软件 |
PyQt | PyQt 是 KDE 的底层 GUI 库的 Python 封装 |
PyGTK | PyGTK 是 Gnome 的底层 GUI 库 GTK+ 的 Python 封装 |
下面我们将会介绍较为常用的两种模块,分别是内置的Tkinker模块和wxPython模块,由于Tkinker是系统内置的,所有我们不需要下载就可以直接进行使用,而wxPython模块则需要我们从第三方库中下载使用。
Tkinter模块
在Tkinter模块中有15个控件供我们使用,我们先对这些控件做一个简单的介绍。
在Tkinter模块中有15个控件供我们使用,我们先对这些控件做一个简单的介绍。
1) Button
提供一个按钮,点击能触发事件。
2) Canvas
提供一个画布,即GUI界面的大小。
3) Tk
创建应用程序主窗口。
4) Checkbutton
可选择的多个按钮。
5) Entry
提供一个输入框,从键盘输入信息。
6) Frame
提供一个窗口,可以承载其他控件。
7) Label
提供一个标签,可以显示文字或者图片。
8) Listbox
提供一个列表框,可以从列表框中选择一个。
9) Menu
提供一个菜单栏,可以选择一个。
10) Menubutton
菜单按钮。
11) Message
消息文本框。
12) Radiobutton
单选的按钮,只能从多个按钮中选择其中的一个
13) Scale
滑动条。
14) Scrollbar
滚动条。
15) Text
提供一个文本供使用者输入信息。
16) Toplevel
创建一个弹出式窗口。
创建窗口
要创建一个图形界面,首先要有一个窗口来供我们添加其他控件,添加窗口使用tkinter的Tk()函数,语法格式为:
window = tkinter.Tk()
window.mainloop()
window为我们创建的窗口名字,后面为使用方法,tkinter.mainloop()为注册调用管理器来响应事件,即启动这个窗口。看下面代码:
import tkinter
window = tkinter.Tk()
window.mainloop()
如果要管理窗口的最大尺寸和最小尺寸的话采用下面的方式:
import tkinter
window = tkinter.Tk()
window.minsize(366, 366)#最小尺寸
window.maxsize(566, 566)#最大尺寸
window.mainloop()
Label组件
我们如果要在窗口内添加文本或者图片,可以使用Label控件,使用方式如下:
import tkinter
def main():
win = tkinter.Tk()
win.minsize(366, 366)#最小尺寸
win.maxsize(888, 888)#最大尺寸
area_one = tkinter.Label(win,text='This is area_one',font=("华文行楷", 20), fg="red")
area_one.pack(side = 'left')
area_two = tkinter.Label(win,text='This is area_two',font=("黑体", 20), fg="blue")
area_two.pack(side = 'right')
area_three = tkinter.Label(win,text='This is area_three',font=("宋体", 20), fg="black")
area_three.pack()
win.mainloop()
if __name__ == '__main__':
main()
组件添加的形式为:
组件名 = tkinter.Label(放置的窗口,文本或图片,附加内容)
组件名.pack(side = ‘位置’)
我们根据对应信息把相应的内容填入,然后在通过pack定位一下信息,默认输出的是top
Frame控件
学完窗口和Label,如果在窗口中放入很多控件依靠定位很难控制管理,所以需要使用一个在窗口内管理控件的容器——Frame
area_two = tkinter.Label(frame_one,text = 'hahaha',font =("黑体",20),fg="blue")
area_two.pack(side ='bottom')#放在下面
frame_one.pack(side ='left')#左侧的容器
frame_two = tkinter.Frame(win)#在名为win界面中的第二个Frame控件
area_one =tkinter.Frame(frame_two,text = 'happy',font = ("华文行楷",20),fg="red")
area_one.pack(side = 'top')
area_two = tkinter.Label(frame_two, text='hahaha', font=("黑体", 20), fg="blue")
area_two.pack(side = 'bottom')
frame_two.pack(side = 'right')
win.mainloop()
if __name__ == '__maim__' :
main()
print('win')
运行结果为:
Buttom控件
我们在进行图形界面开发的时候,按钮是必不可少的一项,按钮的作用为点击一次触发一次事件,我们可以通过按钮绑定函数进行事件的触发操作。
先通过下表格来看一下Buuton控件中的相关可选项。
我们在使用Button控件的时候常常会和tkinter模块中的messagebox模块一起使用,通过后者弹出消息框
import tkinter
import tkinter.messagebox
win = tkinter.Tk()
win.minsize(166, 40) # 最小尺寸
def button_event():
tkinter.messagebox.showinfo("Button事件", "欢迎进入Python教学")
button_one = tkinter.Button(win, text = "www.dotcpp.com", command = button_event)
button_one.pack()
win.mainloop()
运行后会出现如下的窗口。
点击这个按钮会出现下面的窗口。
Entry控件
Entry控件的作用是在键盘输入的文本信息,它的语法格式如下:
|
容器即内容放入的位置,可选项和上一节我们学习提到的Button中的可选项类似, 可选择的有:
样式 | 功能 |
bg和bd | 背景颜色和边框大小 |
cursor | 光标的形状 |
font | 文本字体 |
exportselection | 文本框内容是否复制功能 |
fg | 文字颜色 |
highlightcolor | 边框高亮的颜色 |
justify | 对齐方式 |
relief | 边框样式 |
selectbackground | 选择的文本背景颜色 |
selectborderwidth | 选择的文本背景边框宽度 |
selectforeground | 选择的文字颜色 |
state | 只读或可写控制 |
textvariable | 文本框的值 |
width | 文本框宽度 |
xscrollcommand | 水平方向滚动条 |
2. Entry控件常用的方法
1) delete(first, last=None)
删除first-last中的所有内容,如果使用delete(0,END)则删除输入框的所有内容
2) get()
获取输入框内的所有内容
3) icursor(index)
移动光标到index参数的位置
4) index(index)
返回index参数对应的序号
5) insert(index, text)
把text参数中的内容插入到索引为index的位置
6) Select_clear()
清空文本框
7) xview ( index )
设置文本框链接的水平滚动条
3. Entry控件的使用
我们通过实例来使用一下Entry控件。
例如:
import tkinter
win = tkinter.Tk()
Frame_one = tkinter.Frame(win)#先创建一个容器放上面存放登录
Frame_one.pack(side = 'top')
Frame_two = tkinter.Frame(win)#再创建一个容器放中间存放密码
Frame_two.pack()
Frame_three = tkinter.Frame(win)#再创建一个容器在下面存放按钮
Frame_three.pack(side = 'bottom')
Label_one = tkinter.Label(Frame_one,text = '姓名:')
Lable_two = tkinter.Label(Frame_two,text = '密码:')
Entry_one = tkinter.Entry(Frame_one,bd = 5)
Entry_two = tkinter.Entry(Frame_two,bd = 5)
Button_one = tkinter.Button(Frame_three,text = '登录',activeforeground = 'red',activebackground = 'yellow',width = '7')
Button_one.pack(side = 'left')
Button_two = tkinter.Button(Frame_three,text = '注册',activeforeground = 'blue',activebackground = 'pink',width = '7')
Button_two.pack(side = 'right')
Label_one.pack(side = 'left')
Entry_one.pack(side = 'right')
Lable_two.pack(side = 'left')
Entry_two.pack(side = 'right')
win.mainloop()
activeforeground,activebackground为点击按钮时分别出现红字黄色的背景。
输出结果为:
我们首先在窗口中放置了三个容器,从上到下依次存放姓名、密码和按钮,然后再姓名后面放一个Entry控件,供我们输入姓名,在密码对应的后面放一个Enrty控件来输入密码,最后在下面放两个按钮分别提供登录和注册,最后我们把他们的位置放在左右一一对应。
假如你嫌datetime这个包名称太长,想要给它取个别名,以后每次用到它的时候都用它的别名代替它,这时就需要用到import…as,例子如下:
import datetime as dt
我们再通过函数绑定测试登录信息
#一共创建了三个Frame容器。
import tkinter as tk
import tkinter.messagebox
win = tk.Tk()
frame_name = tk.Frame(win)#创建容器来存放登陆name的Label(文本框)与Entry(输入框)
frame_name.pack(side="top")#使该容器在页面的顶部
label_name = tk.Label(frame_name, text="Your Name : ")
label_name.pack(side="left")
entry_name = tk.Entry(frame_name, bd=5)
entry_name.pack(side="right")#在容器内创建Label与Entry,并使label在左,entry在右
# 下面的同理:
frame_password = tk.Frame(win)#创建容器用来存放登录password的Label(文本框)与Entry(输入框)
frame_password.pack()
label_password = tk.Label(frame_password, text="Your Password : ")
label_password.pack(side="left")
entry_password = tk.Entry(frame_password, bd=5)
entry_password.pack(side="right")
def login():
if entry_name.get() == "qy":
if entry_password.get() == "dotcpp":
print(tkinter.messagebox.showinfo("login", "Success!"))
else:
print(tkinter.messagebox.showerror("login", "Failed!"))
entry_name.delete(0, "end")
entry_password.delete(0,"end")
else:
print(tkinter.messagebox.showerror("login", "Failed!"))
entry_name.delete(0, "end")
entry_password.delete(0,"end")
def signin():
print(tkinter.messagebox.showerror("signin", "Without Code!"))#必须先定义函数,否则点击按钮调用函数时会报函数不存在的错误
frame_button = tk.Frame(win)#创建容器以存放按钮
frame_button.pack(side="bottom")#使该容器位于页面最下方
button_login = tk.Button(
frame_button,
text="login",
activeforeground="red",
activebackground="yellow",
width="7",
command=login
# command的意思是执行已定义的函数,不可执行下文中出现的函数(未定义的函数)
)
button_login.pack(side="left")
# 下面的同理:
button_signin = tk.Button(
frame_button,
text="signin",
activeforeground="blue",
activebackground="pink",
width="7",
command=signin,
)
button_signin.pack(side="right")
win.mainloop()
在Tkinter包下的message模块下提供了大量的工具函数来生成各种下消息框
messagebox的工具函数大致分为图标区、提示区和按钮区
输出的界面为:
当我们输入qy和dotcpp时如下:
如果输入其他内容显示如下: