简介:
什么是GUI呢?
GUI是Graphical User Interface的首字母简写,翻译过来就是图像用户接口,简单理解就是,咋们window系统中窗口以及各种按钮、输入框、菜单栏等。
例如下图,开发GUI的目的就是为了让用户更好的使用软件和计算机。
学过java的小伙伴们应该都知道java里面的GUI编程,java中使用swing或者awt库。Python的GUI编程和java的基本一致,Python中使用Tkinter库中的那些组件,比如说:Label(标签)、Entry(输入框)、Button(按钮)、Text(文本框)来实现GUI编程。
这项技术已经不断被淘汰,但是学习总得学习一下的啦,接下来就使用真实案例和代码来学习一下吧。
主要内容:
1.标签label和按钮button的使用
# coding:utf-8
# 导入tkinter库,并且重命名为tk
import tkinter as tk
# 通过tk创建窗口
window = tk.Tk()
# 给窗口起个标题
window.title("新的窗口")
# 设定窗口的尺寸
window.geometry("1000x500")
# 创建组件中字符串变量,在组件里面使用
var = tk.StringVar()
# 设定标签,第一个参数是该组件的父组件,其他参数设定具体属性
l = tk.Label(window, textvariable=var, bg="red", font=("Arial", 12), width=15,
height=2)
# 防止标签
l.pack()
on_hit = False
def hit():
global on_hit
# 默认最初没有点
if on_hit == False:
on_hit = True
# 通过set方法设定组件中的变量
var.set("你点击我了")
else:
on_hit = False
var.set("")
# 创建按钮,并通过command进行点击后的函数处理
b = tk.Button(window, text="hit me", width=15, height=2, command=hit)
# 放置按钮
b.pack()
# 让窗口保持不断更新
window.mainloop()
效果图:
2.输入框entry的使用
# coding:utf-8
import tkinter as tk
"""
entry和text控件的使用
"""
# 获取上窗口
window = tk.Tk()
# 设定窗口的名称
window.title("小把戏")
# 设定窗口的尺寸
window.geometry("1000x500")
# 设定输入框
entry = tk.Entry(window, show=None)
# 放置输入框
entry.pack()
# 末尾插入
def insert_end():
e_content = entry.get()
t.insert("end", e_content)
# 插入点进行插入
def insert_point():
e_content = entry.get()
t.insert("insert", e_content)
# 设定按钮1,最末尾进行插入
b1 = tk.Button(window, text="end insert", command=insert_end)
# 设定按钮2,在插入点进行插入
b2 = tk.Button(window, text="point insert", command=insert_point)
# 放置按钮1
b1.pack()
# 放置按钮2
b2.pack()
# 设定显示框
t = tk.Text()
# 放置位置
t.pack()
# 让窗口循环起来,保持不断的更新
window.mainloop()
效果图:
3.列表Listbox的使用
# coding:utf-8
import tkinter as tk
"""
列表的使用
"""
# 获取窗口
window = tk.Tk()
# 设定窗口的名称
window.title("列表的使用")
# 设定窗口的尺寸
window.geometry("1000x500")
var1 = tk.StringVar()
# 创建标签
l = tk.Label(window, textvariable=var1, bg="yellow", width=15, height=2)
# 放置标签
l.pack()
def job():
# 获取现在鼠标点击项的内容
v = lb.get(lb.curselection())
# 设定标签内容
var1.set(v)
# 创建按钮
b = tk.Button(window, text="你给我上去", command=job)
# 放置按钮
b.pack()
var2 = tk.StringVar()
var2.set(("清华大学", "北京大学", "复旦大学", "交通大学"))
# 创建列表盒子
lb =tk.Listbox(window, listvariable=var2)
list_item = [1, 2, 3, 4]
# 循环插入
for m in list_item:
lb.insert("end", m)
lb.insert(1, "first")
lb.insert(2, "second")
lb.delete(2)
lb.pack()
# 循环窗口
window.mainloop()
效果图:
4. 单选按钮Radiobutton的使用
# coding:utf-8
import tkinter as tk
"""
使用单选按钮
"""
window = tk.Tk()
window.title("抽奖系统")
window.geometry("1000x500")
# tkinter中的变量都是这样的
var = tk.StringVar()
# 使用标签显示单选之后的结果
l = tk.Label(window, text=" ", bg="green", width=30, height=2)
# 放置标签
l.pack()
def job():
l.config(text = "恭喜您抽到了" + var.get())
# 创建单选按钮A
rb1 = tk.Radiobutton(window, text="礼物A", variable=var, value="MacBook", command=job)
rb1.pack()
# 创建单选按钮B
rb2 = tk.Radiobutton(window, text="礼物B", variable=var, value="iphone", command=job)
rb2.pack()
# 创建单选按钮C
rb3 = tk.Radiobutton(window, text="礼物C", variable=var, value="ipad", command=job)
rb3.pack()
# 循环起来
window.mainloop()
效果图:
5.尺度scale的使用
# coding:utf-8
import tkinter as tk
"""
scale的使用
"""
# 获取窗口
window = tk.Tk()
# 设置窗口的标题
window.title("调节音量")
# 设置窗口的尺寸
window.geometry("1000x500")
# 设置标签
l = tk.Label(window, bg="yellow", width=30, height=2, text="")
# 放置标签
l.pack()
# scale部件,默认会将自己的值作为参数进行传递
def job(v):
l.config(text="现在的音量是" + v)
# 定义一个scale,设定其长度,具体起始点,水平方向,精度等
scale = tk.Scale(window, length=500, orient=tk.HORIZONTAL,from_ = 0,to=100,
tickinterval=10, resolution=0.01, showvalue=1, command=job)
# 放置scale
scale.pack()
# 让窗口循环起来
window.mainloop()
效果图:
6.多选按钮Checkbutton的使用
# coding:utf-8
import tkinter as tk
"""
多选按钮的使用
"""
# 创建窗口
window = tk.Tk()
# 设置窗口的标题
window.title("练习多选按钮")
# 设置窗口的尺寸
window.geometry("1000x500")
# 组件中的整数变量写法
var1 = tk.IntVar()
var2 = tk.IntVar()
# 标签
l = tk.Label(window, bg="yellow", text="", width=20, height=2)
# 放置标签
l.pack()
def job():
if var1.get() == 1 and var2.get() == 0:
l.config(text="I only love C++")
elif var1.get() == 0 and var2.get() == 1:
l.config(text="I only love Python")
elif var1.get() == 0 and var2.get() == 0:
l.config(text="I don't love either")
else:
l.config(text="I both love them")
# 多选按钮
cb1 = tk.Checkbutton(window, text="C++", variable=var1, onvalue=1, offvalue=0, command=job)
cb2 = tk.Checkbutton(window, text="Python", variable=var2, onvalue=1, offvalue=0, command=job)
cb1.pack()
cb2.pack()
# 循环
window.mainloop()
效果图:
7.画布canvas的使用
# coding:utf-8
import tkinter as tk
"""
画布的使用
"""
# 创建窗口
window = tk.Tk()
# 设定窗口的标题
window.title("画布的使用")
# 设定画布的尺寸
window.geometry("1000x500")
# 创建画布
canvas = tk.Canvas(window, bg="blue", height=400, width=700)
# 加载图片文件
image_file = tk.PhotoImage(file="F:\\研究生0年级\\learnAI\\a.png")
# 将图片放在画布中的具体位置
image = canvas.create_image(10, 10, anchor="nw", image = image_file)
# 画布中画各种形状
x0, y0, x1, y1 = 50, 50 ,80, 80
# 画线
line = canvas.create_line(x0, y0, x1, y1)
# 圆型
circular = canvas.create_oval(x0, y0, x1, y1, fill="red")
# 扇形
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=120)
# 正方形,边长为20
rect = canvas.create_rectangle(100, 30, 100+20, 30+20)
canvas.pack()
# 移动函数
def move():
canvas.move(rect, 0, 20)
# 按钮
b = tk.Button(window, text="移动", command=move)
b.pack()
# 循环起来
window.mainloop()
效果图:
8.菜单栏menubar的使用
# coding:utf-8
import tkinter as tk
"""
menubar菜单栏
"""
# 获取窗口
window = tk.Tk()
# 设定窗口名称
window.title("菜单栏的使用")
# 设定窗口的大小
window.geometry("1000x500")
# 放一个标签
l = tk.Label(window, text="", width=50, height=5, bg="yellow")
l.pack()
counter = 0
def job():
global counter
l.config(text="do %d" %counter)
counter += 1
# 获取菜单栏
menubar = tk.Menu(window)
# 菜单1之文件菜单
filemenu = tk.Menu(menubar, tearoff=0)
# 使用菜单栏将文件菜单添加进去
menubar.add_cascade(label="文件", menu=filemenu)
filemenu.add_command(label="新建", command=job)
filemenu.add_command(label="打开", command=job)
filemenu.add_command(label="保存", command=job)
# 分割线
filemenu.add_separator()
# 退出
filemenu.add_command(label="退出", command=window.quit)
# 菜单2之大学
universitymenu = tk.Menu(menubar, tearoff=0)
# 使用菜单栏将菜单2添加进去
menubar.add_cascade(label="大学", menu=universitymenu)
universitymenu.add_command(label="清华大学", command=job)
universitymenu.add_command(label="北京大学", command=job)
universitymenu.add_command(label="浙江大学", command=job)
# 创建二级菜单,文件菜单是一级菜单,所以是父组件
second_menu = tk.Menu(filemenu)
# 文件菜单父组件将二级菜单进行添加
filemenu.add_cascade(label="导入", menu=second_menu, underline=0)
# 二级菜单中放具体项
second_menu.add_command(label="你好",command=job)
# 将创建的菜单栏,修改进原窗口中
window.config(menu=menubar)
# 循环起来
window.mainloop()
效果图:
9. 框架frame的使用
# coding:utf-8
import tkinter as tk
"""
框架frame的使用
"""
# 创建窗口
window = tk.Tk()
# 设定窗口的标题
window.title("其实就是划分区域呗")
# 设定窗口的尺寸
window.geometry("1000x500")
# 先创建标签,并放置
l = tk.Label(text="on the window").pack()
# 窗口里面的大框架
frm = tk.Frame(window)
# 放置这个框架
frm.pack()
# 左侧框架
frm1 = tk.Frame(frm,)
# 将框架放置到左侧
frm1.pack(side="left")
# 右侧框架
frm2 = tk.Frame(frm,)
# 将框架放置到右侧
frm2.pack(side="right")
# 划分好区域之后,进行分区域放标签
tk.Label(frm1, text="左侧标签1").pack()
tk.Label(frm1, text="左侧标签2").pack()
tk.Label(frm2, text="右侧标签").pack()
# 使窗口循环起来
window.mainloop()
效果图:
扫描二维码关注公众号,回复:
14315717 查看本文章
10. 弹窗messagebox的使用
# coding:utf-8
import tkinter as tk
import tkinter.messagebox
from tkinter import messagebox
"""
弹窗的使用
"""
# 获取窗口
window = tk.Tk()
# 设置窗口标题
window.title("弹窗的使用")
# 设置窗口的大小
window.geometry("1000x500")
def job():
# 弹窗展示信息
tkinter.messagebox.showinfo(title="Hi", message='hahahah')
# warning
# tkinter.messagebox.showwarning(title="warining", message="警告")
# error
# tkinter.messagebox.showerror(title="error", message="错误")
# 询问框,返回yes或者no
# print(tk.messagebox.askquestion(title="询问yes或no", message="Are you OK?"))
# 询问框,返回True或者FALSE
# print(tk.messagebox.askyesno(title="询问true或false", message="Do you love me?"))
# 询问确认还是取消,返回true和false
# print(tk.messagebox.askokcancel(title="购物", message="确定要购买吗?"))
# 询问重试还是取消,返回true和false
# print(tk.messagebox.askretrycancel(title="爱", message="你爱我吗?"))
b = tk.Button(window, text="点我试试", command=job).pack()
# 循环起来
window.mainloop()
效果图:
11.组件的三种放置方式
(1)pack
# coding:utf-8
import tkinter as tk
"""
pack、gird、place三种放置方式
"""
# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")
tk.Label(window, text="上面").pack(side="top")
tk.Label(window, text="下面").pack(side="bottom")
tk.Label(window, text="左面").pack(side="left")
tk.Label(window, text="右面").pack(side="right")
# 循环起来
window.mainloop()
效果图:
(2)grid
# coding:utf-8
import tkinter as tk
"""
pack、grid、place三种放置方式
"""
# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")
for i in range(4):
for j in range(3):
# padx和pady是用来扩展每个方格的大小
tk.Label(window, text="love").grid(row=i, column=j, padx=50, pady=50)
# 循环起来
window.mainloop()
效果图:
(3)place
# coding:utf-8
import tkinter as tk
"""
pack、grid、place三种放置方式
"""
# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")
# 以最西北方向为坐标原点,在具体的xy坐标位置,放置
tk.Label(window, text="啊啊啊啊").place(x=100, y=100, anchor="nw")
# 循环起来
window.mainloop()
效果图: