图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操做用户界面。相比于命令行模式,更加方便用户操做,加强用户体验。本文以一个简单的登陆窗口为例,简述GUI(图形化用户界面)编程的相关知识点,仅供学习分享使用,若有不足之处,还请指正。html
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 能够快速的建立 GUI 应用程序。因为 Tkinter 是内置到 python 的安装包中、只要安装好 Python 以后就能 import Tkinter 库、并且 IDLE 也是用 Tkinter 编写而成、相关知识点以下:python
如何实现一个简单的登陆窗口,操做步骤以下:编程
1 from tkinter import * # 引入tkinter包 2 3 app = Tk() # 定义一个界面 4 app.mainloop() # 显示页面
默认状况下,定义的窗口会显示与屏幕左上方,且标题为空,以下所示:app
1 app = Tk() # 定义一个界面 2 app.title(string='Alan.hsiang>>>系统登陆') # 设置标题 3 app.geometry('400x300+300+400') # 大小坐标设置格式 =widthxheight+x+y 4 app.mainloop()
添加标题和设置大小位置后,效果以下所示:ide
当空页面建立完成后,须要为页面添加元素(用户名,密码,登陆按钮等),以下所示:函数
1 app = Tk() # 定义一个界面 2 app.title(string='Alan.hsiang>>>系统登陆') # 设置标题 3 app.geometry('400x300+300+400') # 大小坐标设置格式 =widthxheight+x+y 4 name_label = Label(master=app, text='用户名') # Label用于显示文本内容,且用户没法修改 5 pwd_label = Label(master=app, text='密码') # master 用于表示对象属于哪一个容器 6 name_entry = Entry(master=app) # 文本框,用户能够进行输入 7 pwd_entry = Entry(master=app, show='*') # 密码框,显示密文,以*代替 8 login_btn = Button(master=app, text='登陆') # 登陆按钮 9 name_label.pack(anchor=W) # pack 方式布局,默认为居中 ,一个元素一行 anchor用于设置对齐方式 10 name_entry.pack(anchor=W) 11 pwd_label.pack(anchor=W) 12 pwd_entry.pack(anchor=W) 13 login_btn.pack(anchor=W) 14 app.mainloop()
执行结果,以下所示:oop
默认的pack布局方式,是比较丑的,下面采用grid方式进行布局,以下所示:布局
1 name_label.grid(row=0,column=0) # grid 方式布局,经过设置行列的方式布局,从0开始 2 name_entry.grid(row=0,column=1) 3 pwd_label.grid(row=1,column=0) 4 pwd_entry.grid(row=1,column=1) 5 login_btn.grid(row=2,column=1)
执行结果以下所示:学习
经过grid布局后,虽然看起来比较接近,可是元素距离左边太近,且控件以前太拥挤,没有空隙,能够经过设置padx,pady来改变,以下所示:优化
1 name_label.grid(row=0, column=0, padx=20, pady=20) # grid 方式布局,经过设置行列的方式布局,从0开始 2 name_entry.grid(row=0, column=1) 3 pwd_label.grid(row=1, column=0) 4 pwd_entry.grid(row=1, column=1) 5 login_btn.grid(row=2, column=1, pady=20, stick=E) # stick表示靠哪边对齐,经过N(北)S(南)W(西)E(东)来表示
设置padx,pady后,效果以下所示:
当初步完成页面布局后,下面开始完善功能,为按钮添加事件。
经过command属性添加事件,以下所示:
1 # 由于python是顺序执行,因此login函数定义必须在绑定事件前面 2 def login(): 3 name = name_entry.get() 4 pwd = pwd_entry.get() 5 if name == '' or pwd == '': 6 messagebox.showerror(title='错误', message='用户名和密码都不能为空!!!') 7 else: 8 if name == 'admin' and pwd == '123': 9 messagebox.showinfo(title='成功', message='登陆成功') 10 else: 11 messagebox.showerror(title='错误', message='用户名和密码错误!!!') 12 13 14 login_btn = Button(master=app, text='登陆', width=8, command=login) # 登陆按钮
执行效果以下:
用户名和密码为空时,点击按钮,提示错误信息
当输入正确的用户名密码时,提示成功,以下树所示:
整个示例比较简单,属于基础入门知识,代码以下所示:
1 from tkinter import * # 引入tkinter包 2 from tkinter import messagebox # 引入对话框包 3 4 app = Tk() # 定义一个界面 5 app.title(string='Alan.hsiang>>>系统登陆') # 设置标题 6 app.geometry('400x300+300+400') # 大小坐标设置格式 =widthxheight+x+y 7 name_label = Label(master=app, text='用户名') # Label用于显示文本内容,且用户没法修改 8 pwd_label = Label(master=app, text='密码') # master 用于表示对象属于哪一个容器 9 10 name_entry = Entry(master=app) # 文本框,用户能够进行输入 11 pwd_entry = Entry(master=app, show='*') # 密码框,显示密文,以*代替 12 13 14 # 由于python是顺序执行,因此login函数定义必须在绑定事件前面 15 def login(): 16 name = name_entry.get() 17 pwd = pwd_entry.get() 18 if name == '' or pwd == '': 19 messagebox.showerror(title='错误', message='用户名和密码都不能为空!!!') 20 else: 21 if name == 'admin' and pwd == '123': 22 messagebox.showinfo(title='成功', message='登陆成功') 23 else: 24 messagebox.showerror(title='错误', message='用户名和密码错误!!!') 25 26 27 login_btn = Button(master=app, text='登陆', width=8, command=login) # 登陆按钮 28 29 # name_label.pack(anchor=W) # pack 方式布局,默认为居中 ,一个元素一行 anchor用于设置对齐方式 30 # name_entry.pack(anchor=W) 31 # pwd_label.pack(anchor=W) 32 # pwd_entry.pack(anchor=W) 33 # login_btn.pack(anchor=W) 34 35 name_label.grid(row=0, column=0, padx=20, pady=20) # grid 方式布局,经过设置行列的方式布局,从0开始 36 name_entry.grid(row=0, column=1) 37 pwd_label.grid(row=1, column=0) 38 pwd_entry.grid(row=1, column=1) 39 login_btn.grid(row=2, column=1, pady=20, stick=E) # stick表示靠哪边对齐,经过N(北)S(南)W(西)E(东)来表示 40 41 # login_btn.bind('<Button-1>', func=login) # 绑定事件 42 43 app.mainloop()
关于更多Tkinter相关内容,能够参考菜鸟教程,里面有更详尽的介绍。
临江仙·夜登小阁忆洛中旧游