用Python給圖像算法做個簡單應(yīng)用界面
以前在Windows上做界面用MFC,現(xiàn)在做算法都是基于Python,所以轉(zhuǎn)用Python的Tkinter庫來做。主要是能使用Opencv和Torch處理數(shù)據(jù),然后在界面上顯示。
效果如下:
主要包括3個板塊,其余還有一些小功能:
1、顯示固定的圖片?;驈碾娔X加載一張圖片并顯示(涉及到按鈕的響應(yīng)函數(shù)編寫和彈窗)
2、下拉框和文本框的使用
3、進(jìn)度條的使用(涉及到多線程)


Tkinter支持控件自動調(diào)整布局,但是時間比較趕就不研究了,使用固定位置布局,界面也不給調(diào)整。
控件名稱
- Buttom 按鈕,軟件交互功能實現(xiàn)
- Label (叫什么不重要),用來顯示圖片或文字
- ComboBox 下拉框,做選擇
- Entry 文本框,做文本輸入
- Progressbar 進(jìn)度條,算法跑起來之后顯示進(jìn)度
- 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)
#后面兩句實現(xiàn)圖片切換顯示
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
# 單獨開一個線程,綁定線程函數(shù)process_code,參數(shù)后面的','很關(guān)鍵
# 不開線程界面會進(jìn)入處理函數(shù)死循環(huán),用戶體驗不太好
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
#上面是控件的響應(yīng)函數(shù)
################################################################################
#下面是界面控件的布局
#主界面
root = tk.Tk()
root.title('python界面測試') #修改界面標(biāo)題
root.iconbitmap('img/tm.ico') #修改界面ico
root.geometry('800x500') #設(shè)定界面尺寸 HxW
root.resizable(width=False, height=False) #不允許調(diào)整窗口大小,不固定刪除此行
#添加兩個板塊邊界框
Frame1 = tk.LabelFrame(root, height=200, width=145)
Frame1.place(x=15, y=100)
Frame2 = tk.LabelFrame(root, text="結(jié)果顯示", 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格式轉(zhuǎn)pillow
Label1 = tk.Label(root, image=img) #初始化默認(rèn)圖片
Label1.place(x=15, y=20) #圖片顯示框在界面上的位置
Label2 = tk.Label(root,
width=18,height=7, #控件大?。ㄗ⒁鈫挝徊皇窍袼兀?
bg="white") #默認(rèn)白色背景
Label2.place(x=20,y=110) #圖片顯示框在界面上的位置
Buttom1 = tk.Button(root,
width=15,height=1, #按鈕大小
text='加載檢索圖片', #按鈕文本
relief=RELIEF[3], #按鈕的風(fēng)格
command=Buttom1_CallBack) #綁定響應(yīng)函數(shù)
Buttom1.place(x=25, y=250) #按鈕在界面上的位置
#添加參數(shù)文本框、下拉框、下拉框內(nèi)容輸出按鈕
Combobox1 = ttk.Combobox(root, width=17, height=1)
Combobox1['value'] = ('窗前明月光','疑是地上霜','舉頭望明月','明月照我影')
Combobox1.current(0)
Combobox1.place(x=15, y=320)
Label3 = tk.Label(root, text='參數(shù)')
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)
#添加進(jìn)度條、開始處理按鈕
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給圖像算法做個簡單應(yīng)用界面的詳細(xì)內(nèi)容,更多關(guān)于python 應(yīng)用界面的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python猜數(shù)字算法題詳解
- python算法題 鏈表反轉(zhuǎn)詳解
- 一道python走迷宮算法題
- python實現(xiàn)dbscan算法
- Python機(jī)器學(xué)習(xí)之PCA降維算法詳解
- Python機(jī)器學(xué)習(xí)算法之決策樹算法的實現(xiàn)與優(yōu)缺點
- python排序算法的簡單實現(xiàn)方法
- Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解
- python利用K-Means算法實現(xiàn)對數(shù)據(jù)的聚類案例詳解
- python入門之算法學(xué)習(xí)
- python實現(xiàn)線性回歸算法
- Python實現(xiàn)七大查找算法的示例代碼
- python 算法題——快樂數(shù)的多種解法
相關(guān)文章
在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法
今天小編就為大家分享一篇在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python使用Bokeh庫實現(xiàn)實時數(shù)據(jù)的可視化
Python語言以其豐富的數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)而聞名,其中Bokeh庫作為一種功能強(qiáng)大的可視化工具,為實時數(shù)據(jù)的可視化提供了優(yōu)秀的支持,本文將介紹如何使用Bokeh庫實現(xiàn)實時數(shù)據(jù)的可視化,并提供相關(guān)代碼實例,需要的朋友可以參考下2024-05-05
Django中模版的子目錄與include標(biāo)簽的使用方法
這篇文章主要介紹了Django中模版的子目錄與include標(biāo)簽的使用方法,有利于Python的Django框架的模版布局,需要的朋友可以參考下2015-07-07
使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例
這篇文章主要介紹了使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python中scatter函數(shù)參數(shù)及用法詳解
這篇文章主要介紹了Python中scatter函數(shù)參數(shù)及用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

