导入模块:
代码首先导入了Tkinter模块用于创建GUI,messagebox用于弹出消息框,subprocess用于运行其他Python脚本,PIL的ImageTk和Image用于处理图像。
import tkinter as tk
from tkinter import messagebox
import subprocess
from PIL import ImageTk, Image
设置窗口:
创建了主窗口win
,并设置了标题和大小。
win=tk.Tk()
win.title('人脸识别系统')
win.geometry('600x650')
设置背景图:
使用PIL的Image打开背景图,调整大小后使用ImageTk创建一个适合Tkinter的图像对象,然后创建一个Label将其作为窗口背景。
image = Image.open("1.gif")
image = image.resize((600, 650)) # 调整背景图片大小
photo1 = ImageTk.PhotoImage(image)
# 创建Label并将背景图片设置为背景
canvas = tk.Label(win, image=photo1)
canvas.pack()
功能定义:
代码定义了几个函数,每个函数都用来启动不同的Python脚本,这些脚本构成了人脸识别系统的不同部分(识别、提取、标注、对比、动态处理)。每个函数尝试使用subprocess.Popen运行相应的Python脚本,并在出现错误时使用messagebox.showerror显示错误消息。
#定义识别
def S():
script_path = "识别.py"
try:
#运行文件
subprocess.Popen(["python", script_path])
win.destroy()
except Exception as e:
# 如果有错误,弹出消息框
messagebox.showerror("Error", f"无法打开脚本:{e}")
#定义提取
def T():
script_path = "提取.py"
try:
# 运行文件
subprocess.Popen(["python", script_path])
win.destroy()
except Exception as e:
# 如果有错误,弹出消息框
messagebox.showerror("Error", f"无法打开脚本:{e}")
#定义标注
def B():
script_path = "标注.py"
try:
#运行文件
subprocess.Popen(["python", script_path])
win.destroy()
except Exception as e:
# 如果有错误,弹出消息框
messagebox.showerror("Error", f"无法打开脚本:{e}")
#定义对比
def R():
script_path = "人脸比对.py"
try:
# 运行文件
subprocess.Popen(["python", script_path])
win.destroy()
except Exception as e:
# 如果有错误,弹出消息框
messagebox.showerror("Error", f"无法打开脚本:{e}")
#定义动态处理
def D():
script_path = "动态处理.py"
try:
#运行文件
subprocess.Popen(["python", script_path])
win.destroy()
except Exception as e:
# 如果有错误,弹出消息框
messagebox.showerror("Error", f"无法打开脚本:{e}")
退出功能:
定义了一个退出函数,当用户点击退出按钮时,会弹出一个确认框询问用户是否真的要退出,如果用户确认,则销毁窗口。
def close():
if messagebox.askokcancel("退出", "确定要退出吗?"):
win.destroy()
按钮设计:
为每个功能创建了一个按钮,每个按钮都绑定了一个图像和一个命令,命令会调用之前定义的函数。按钮被放置在窗口的特定位置。
image = Image.open("2.gif") # 加载一张图片
photo2 = ImageTk.PhotoImage(image)
bt1 = tk.Button(win, image=photo2, width=198, height=35, command=S)
bt1.place(x=100, y=90)
#人脸提取按钮
image = Image.open("3.gif") # 加载一张图片
photo3 = ImageTk.PhotoImage(image)
bt2 = tk.Button(win,image=photo3,width=198,height=35,command=T)
bt2.place(x=300,y=155)
#特征标注按钮
image = Image.open("4.gif") # 加载一张图片
photo4 = ImageTk.PhotoImage(image)
bt3 = tk.Button(win,image=photo4,width=198,height=35,command=B)
bt3.place(x=100,y=220)
#动态处理按钮
image = Image.open("5.gif") # 加载一张图片
photo5 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo5,width=198,height=35,command=D)
bt4.place(x=100,y=350)
#人脸对比按钮
image = Image.open("F4.gif") # 加载一张图片
photo6 = ImageTk.PhotoImage(image)
bt4 = tk.Button(win,image=photo6,width=198,height=35,command=R)
bt4.place(x=300,y=285)
#退出按钮
image = Image.open("6.gif") # 加载一张图片
photo7 = ImageTk.PhotoImage(image)
bt = tk.Button(win, image=photo7, text="退出",width=170,height=110,command=close)
bt.place(x=380,y=400)
主循环:
最后,调用win.mainloop()
启动Tkinter的事件循环,这会使窗口保持打开状态,直到用户关闭它。
win.mainloop()