怎么利用python写GUI及生成.exe可执行文件
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,怎么利用python写GUI及生成.exe可执行文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.GUI(Graphical Use
千家信息网最后更新 2026年11月03日怎么利用python写GUI及生成.exe可执行文件
怎么利用python写GUI及生成.exe可执行文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一.GUI(Graphical User Interface(图形用户接口))
1.导入需要用到的包
import tkinter as tkimport tkinter.messageboximport copyimport os
2.获取文件夹中所有图片
def get_picture(dirs): '''获得所有图片''' picture_list = [] for dir, dir_abs, files in os.walk(dirs): for file in files: if file.endswith('.png'): # 注意检查分析数据格式 picture_list.append(os.path.join(dir, file)) return picture_list3.定义一个类windows
class Window: button_list = [] object_list = [] pictures = get_picture("F:\\pic\\class-1\\classresnet\\data\\dangerous") file = pictures[0] is_show = True index = 0 image_file = ''4.创建窗口和frame
def __init__(self): '''创建窗口和frame''' self.window = tk.Tk() self.window.title('护目镜安全检测') self.window.geometry('600x400') self.frame = tk.Frame(self.window) self.frame.pack() self.frame_l = tk.Frame(self.frame) self.frame_r = tk.Frame(self.frame) self.frame_l.pack(side='left') self.frame_r.pack(side='right') self.frame_ll = tk.Frame(self.frame_r) self.frame_rr = tk.Frame(self.frame_r) self.frame_ll.pack(side='left') self.frame_rr.pack(side='right')5.定义需要用到的函数(下一页、上一页等按钮要用到的)
def next_picture(self): '''下一张图片''' self.index = self.pictures.index(self.file) self.index += 1 if self.index < len(self.pictures): self.checkout_button() self.file = self.pictures[self.index] self.create_canvas(self.file) else: self.index = len(self.pictures) - 1 tkinter.messagebox.showinfo('提示', '已近是最后一张了') def checkout_button(self): '''判断列表中是否只有button对象''' object_list_copy = copy.copy(self.object_list) for ob in self.object_list: if ob in self.button_list: pass else: b = object_list_copy.pop(self.object_list.index(ob)) b.destroy() self.object_list = object_list_copy def pre_picture(self): '''上一页''' self.index = self.pictures.index(self.file) self.index -= 1 if self.index >= 0: self.checkout_button() self.file = self.pictures[self.index] self.create_canvas(self.file) else: self.index = 0 tkinter.messagebox.showinfo('提示', '已经是第一张了') def show_picture(self): '''展示图片和翻页按钮''' self.file = self.pictures[0] if self.is_show: self.is_show = False self.create_canvas(self.file) button1 = tk.Button(self.frame_ll, text='上一张', font=('Arial', 12), width=10, height=1, bg='orange', command=self.pre_picture, relief='ridge', ) button1.pack() button2 = tk.Button(self.frame_rr, text='下一张', font=('Arial', 12), width=10, height=1, bg='orange', command=self.next_picture, relief='ridge', ) button2.pack() self.button_list.append(button1) self.button_list.append(button2) self.object_list.extend(self.button_list) else: self.is_show = True while self.object_list: o = self.object_list.pop() o.destroy()6.创建按钮、画布,调用主程序
def new_button(self): '''创建展示按钮'''"开始检测和显示结果可在此处新添加tk.button" tk.Button(self.frame_l, text='开始读取', font=('Arial Black', 12), width=10, height=1, bg='green', command=self.show_picture, relief='ridge').pack() # tk.Button(self.frame_l, text='开始检测', font=('Arial Black', 12), width=10, height=1, bg='blue',command=classresnet, relief='ridge').pack() def create_canvas(self, file): '''用画布展示图片''' self.image_file = tk.PhotoImage(file=file) canvas = tk.Canvas(self.frame_r, height=500, width=600, bg='gray') canvas.create_image(1, 1, anchor='nw', image=self.image_file) canvas.pack() self.object_list.append(canvas) def run(self): '''主程序调用''' self.window.mainloop() if __name__ == '__main__': w = Window() w.new_button() w.run()效果展示


完整代码
import tkinter as tkimport tkinter.messageboximport copyimport os# from glob2 import glob# import main """Graphical User Interface(图形用户接口)"""def get_picture(dirs): '''获得所有图片''' picture_list = [] for dir, dir_abs, files in os.walk(dirs): for file in files: if file.endswith('.png'): # 注意检查分析数据格式 picture_list.append(os.path.join(dir, file)) return picture_list class Window: button_list = [] object_list = [] # for pngfile in glob("F:\\pic\\class-1\\classresnet\\datas\\*.png"): # main.image_demo() # output_dir = "F:\\pic\\class-1\\classresnet\\data\\try" # 保存截取的图像目录 # print('图片获取完成 。。。!') # # main.classresnet() pictures = get_picture("F:\\pic\\class-1\\classresnet\\data\\dangerous") file = pictures[0] is_show = True index = 0 image_file = '' def __init__(self): '''创建窗口和frame''' self.window = tk.Tk() self.window.title('护目镜安全检测') self.window.geometry('600x400') self.frame = tk.Frame(self.window) self.frame.pack() self.frame_l = tk.Frame(self.frame) self.frame_r = tk.Frame(self.frame) self.frame_l.pack(side='left') self.frame_r.pack(side='right') self.frame_ll = tk.Frame(self.frame_r) self.frame_rr = tk.Frame(self.frame_r) self.frame_ll.pack(side='left') self.frame_rr.pack(side='right') def next_picture(self): '''下一张图片''' self.index = self.pictures.index(self.file) self.index += 1 if self.index < len(self.pictures): self.checkout_button() self.file = self.pictures[self.index] self.create_canvas(self.file) else: self.index = len(self.pictures) - 1 tkinter.messagebox.showinfo('提示', '已近是最后一张了') def checkout_button(self): '''判断列表中是否只有button对象''' object_list_copy = copy.copy(self.object_list) for ob in self.object_list: if ob in self.button_list: pass else: b = object_list_copy.pop(self.object_list.index(ob)) b.destroy() self.object_list = object_list_copy def pre_picture(self): '''上一页''' self.index = self.pictures.index(self.file) self.index -= 1 if self.index >= 0: self.checkout_button() self.file = self.pictures[self.index] self.create_canvas(self.file) else: self.index = 0 tkinter.messagebox.showinfo('提示', '已经是第一张了') def show_picture(self): '''展示图片和翻页按钮''' self.file = self.pictures[0] if self.is_show: self.is_show = False self.create_canvas(self.file) button1 = tk.Button(self.frame_ll, text='上一张', font=('Arial', 12), width=10, height=1, bg='orange', command=self.pre_picture, relief='ridge', ) button1.pack() button2 = tk.Button(self.frame_rr, text='下一张', font=('Arial', 12), width=10, height=1, bg='orange', command=self.next_picture, relief='ridge', ) button2.pack() self.button_list.append(button1) self.button_list.append(button2) self.object_list.extend(self.button_list) else: self.is_show = True while self.object_list: o = self.object_list.pop() o.destroy() # def code_button(self): # tk.Button(self.frame_l, text='开始检测', font=('Arial Black', 12), width=10, height=1, bg='blue', # command=main.classresnet, relief='ridge').pack() def new_button(self): '''创建展示按钮'''"开始检测和显示结果可在此处新添加tk.button" tk.Button(self.frame_l, text='开始读取', font=('Arial Black', 12), width=10, height=1, bg='green', command=self.show_picture, relief='ridge').pack() # tk.Button(self.frame_l, text='开始检测', font=('Arial Black', 12), width=10, height=1, bg='blue',command=classresnet, relief='ridge').pack() def create_canvas(self, file): '''用画布展示图片''' self.image_file = tk.PhotoImage(file=file) canvas = tk.Canvas(self.frame_r, height=500, width=600, bg='gray') canvas.create_image(1, 1, anchor='nw', image=self.image_file) canvas.pack() self.object_list.append(canvas) def run(self): '''主程序调用''' self.window.mainloop() if __name__ == '__main__': w = Window() w.new_button() w.run()二.生成exe文件
在windows下,可以使用pyinstaller打包python程序为exe可执行程序。
1.安装pyinstaller
在cmd命令行窗口运行以下命令安装pyinstaller
pip install pyinstaller
2.打包python程序
在python程序所在目录,执行以下命令
pyinstaller -F xxx.py -w
注:如果不加-w,生成的exe文件会同时出现命令行窗口
3.运行exe文件
打包完成后,在对应目录会出现build和dist文件夹,exe文件就出现在dist文件夹,直接运行即可。
4.常用命令参数
(1) -F 指定打包后只生成一个exe格式的文件(dist文件只有一个exe格式的文件T1)
pyinstaller -F T1.py
(2) -i 改变生成程序的icon图标
pyinstaller -F -i ./my.ico T1.py
(3) -n NAME,-name=NAME 设置产生文件的名字(mypy)
pyinstaller -F -n mypy -i ./my.ico T1.py
效果展示
执行exe应用
因为是exe应用,是可执行文件了,所以直接双击运行即可,运行效果如下图所示:
看完上述内容,你们掌握怎么利用python写GUI及生成.exe可执行文件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
文件
图片
检测
生成
按钮
命令
程序
运行
格式
主程序
效果
文件夹
画布
目录
上一
安全
内容
可在
图形
安全检测
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手磨咖啡
亿人帮互联网科技有限公司
深圳九邦互联网科技有限公司
蓝思科技飞鸽互联网
美国互联网保险保险科技
深圳科技互联网
华宇互联网科技
杭州互联网科技公司
艾特科技互联网
一五八零互联网科技
须眉科技是互联网公司吗
受益于互联网科技的高速发展
互联网科技与管理
昊天互联网科技有限公司
江阴互联网智能科技产品进口
辽宁互联网新科技
坤平互联网科技
华夏恒生科技与互联网科技
长沙茂晟互联网科技有限公司
互联网领先科技活动
为想互联网科技怎么样
美国互联网保险保险科技
互联网属科技
北京互联网科技
互联网金融公司科技
嘟嘟瓜互联网科技
互联网大会黑科技排名
昭通互联网科技选哪家
广州新华互联网科技学校电竞方面
互联网科技平台产品运营