用Python给图像算法做个简单应用界面
更新时间:2021年5月3日 20:01 点击:1799
以前在Windows上做界面用MFC,现在做算法都是基于Python,所以转用Python的Tkinter库来做。主要是能使用Opencv和Torch处理数据,然后在界面上显示。
效果如下:
主要包括3个板块,其余还有一些小功能:
1、显示固定的图片。或从电脑加载一张图片并显示(涉及到按钮的响应函数编写和弹窗)
2、下拉框和文本框的使用
3、进度条的使用(涉及到多线程)
Tkinter支持控件自动调整布局,但是时间比较赶就不研究了,使用固定位置布局,界面也不给调整。
控件名称
- Buttom 按钮,软件交互功能实现
- Label (叫什么不重要),用来显示图片或文字
- ComboBox 下拉框,做选择
- Entry 文本框,做文本输入
- Progressbar 进度条,算法跑起来之后显示进度
- LabelFrame (...),灰色的框框,模块化布局控件
代码如下:
import tkinter as tk import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import cv2 as cv from PIL import Image, ImageTk import time import threading RELIEF=['flat', 'raised', 'sunken', 'solid', 'ridge', 'groove'] CURSOR=['arrow','circle','clock','cross','dotbox','exchange', 'fleur','heart','man','mouse','pirate','plus', 'shuttle','sizing','spider','spraycan','star','target', 'tcross','trek','watch'] def PIL2CV(im): im = im[:, :, ::-1] return ImageTk.PhotoImage(Image.fromarray(im)) def Buttom1_CallBack(): filename = tk.filedialog.askopenfilename() #弹出文件选择对话框 if filename=='': #用户没有选择任何文件 return new_img = cv.imread(filename) if new_img is None: tk.messagebox.showerror('抱歉', '图片加载失败!') return new_img = cv.resize(new_img, (130, 120)) new_img = PIL2CV(new_img) #后面两句实现图片切换显示 Label2.configure(image=new_img, width=130, height=120) Label2.image = new_img tk.messagebox.showinfo('提示','加载图片完成!') def Buttom2_CallBack(): info = Combobox1.get() param = Entry1.get() tk.messagebox.showwarning('警告', '你选择了:'+info+' '+param) def process_code(delay): for i in range(100): Progressbar1['value'] = i+1 root.update() time.sleep(delay) Buttom3.configure(text='开始处理', state='normal') tk.messagebox.showinfo('提示', '处理完成!') Progressbar1.configure(value=0) def Buttom3_CallBack(): yn = tk.messagebox.askyesno('警告','是否需要开始处理?') if not yn: return Buttom3.configure(text='处理中...', state='disabled') #控件失效 delay = 0.01 # 单独开一个线程,绑定线程函数process_code,参数后面的','很关键 # 不开线程界面会进入处理函数死循环,用户体验不太好 t = threading.Thread(target=process_code, args=(delay,)) t.start() def Buttom4_CallBack(): global page_count if page_count<=0: page_count = 0 return else: page_count -= 1 Label4.configure(text='第'+str(page_count)+'页') return def Buttom5_CallBack(): global page_count if page_count>=100: page_count = 100 return else: page_count += 1 Label4.configure(text='第' + str(page_count) + '页') return #上面是控件的响应函数 ################################################################################ #下面是界面控件的布局 #主界面 root = tk.Tk() root.title('python界面测试') #修改界面标题 root.iconbitmap('img/tm.ico') #修改界面ico root.geometry('800x500') #设定界面尺寸 HxW root.resizable(width=False, height=False) #不允许调整窗口大小,不固定删除此行 #添加两个板块边界框 Frame1 = tk.LabelFrame(root, height=200, width=145) Frame1.place(x=15, y=100) Frame2 = tk.LabelFrame(root, text="结果显示", height=400, width=620) Frame2.place(x=170, y=5) #添加图片显示框、加载图片框、加载图片按钮 img = cv.imread('img/title.jpg') #opencv加载图片 img = cv.resize(img, (140,70)) #图片缩放 img = PIL2CV(img) #opencv格式转pillow Label1 = tk.Label(root, image=img) #初始化默认图片 Label1.place(x=15, y=20) #图片显示框在界面上的位置 Label2 = tk.Label(root, width=18,height=7, #控件大小(注意单位不是像素) bg="white") #默认白色背景 Label2.place(x=20,y=110) #图片显示框在界面上的位置 Buttom1 = tk.Button(root, width=15,height=1, #按钮大小 text='加载检索图片', #按钮文本 relief=RELIEF[3], #按钮的风格 command=Buttom1_CallBack) #绑定响应函数 Buttom1.place(x=25, y=250) #按钮在界面上的位置 #添加参数文本框、下拉框、下拉框内容输出按钮 Combobox1 = ttk.Combobox(root, width=17, height=1) Combobox1['value'] = ('窗前明月光','疑是地上霜','举头望明月','明月照我影') Combobox1.current(0) Combobox1.place(x=15, y=320) Label3 = tk.Label(root, text='参数') Label3.place(x=15, y=350) Entry1 = ttk.Entry(root, width=9) #文本框为啥没有H Entry1.place(x=50, y=350) Entry1.insert(0,'0.5') Buttom2 = tk.Button(root, width=15,height=1, text='你选择了什么?', relief=RELIEF[3], command=Buttom2_CallBack) Buttom2.place(x=25, y=380) #添加进度条、开始处理按钮 Progressbar1 = ttk.Progressbar(root, length=600, value=0, cursor=CURSOR[1]) Progressbar1.place(x=15, y=460) Buttom3 = tk.Button(root, width=15,height=1, text='开始处理', relief=RELIEF[3], command=Buttom3_CallBack) Buttom3.place(x=630, y=455) #添加两个滚动按钮 Buttom4 = tk.Button(root, width=3,height=1, text='<', relief=RELIEF[1], command=Buttom4_CallBack) Buttom4.place(x=380, y=410) global page_count #全局变量,用来控制页码 page_count=0 Label4 = tk.Label(root, text='第0页') Label4.place(x=420, y=410) Buttom5 = tk.Button(root, width=3,height=1, text='>', relief=RELIEF[1], command=Buttom5_CallBack) Buttom5.place(x=470, y=410) root.mainloop() #这句话后面不能有代码
以上就是用Python给图像算法做个简单应用界面的详细内容,更多关于python 应用界面的资料请关注猪先飞其它相关文章!
相关文章
- 这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
- 在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
python-for x in range的用法(注意要点、细节)
这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
python Matplotlib基础--如何添加文本和标注
这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
- 在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
- 这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
- 这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
Python getsizeof()和getsize()区分详解
这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20- 这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
- 这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
- 这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12
- 这篇文章主要介绍了Python绘制的爱心树与表白代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06