標題: 用tkinter開視窗選擇要顯示的圖片及檔名。
意思就是,可以在tkinter中開選擇視窗選擇要開啟的圖片,然後顯示圖片和檔名出來。
===分隔線===
今天要來使用tkinter顯示圖片和圖片,直接進入正題吧!
首先,載入以下套件:
import cv2
import numpy as np
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import StringVar, IntVar
from tkinter.filedialog import askopenfilename
然後設定一個tkinter視窗,標題為圖片顯示,大小為450*700。
window = tk.Tk()
window.title('圖片顯示')
window.geometry('450x700')
接著定義一個函數:
def OpenFile():
#這是圖片檔的路徑
filename = askopenfilename()
#用cv2載入圖片,我們不用imread,因為它不支援中文。
img = cv2.imdecode(np.fromfile(filename,dtype=np.uint8), cv2.IMREAD_COLOR)
#將cv2的BGR轉成RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#重新調整圖片大小
img=cv2.resize(img,(450,280))
#將img載入為PIL的格式。
im = Image.fromarray(img)
#將img載入到ImageTK中
photo = ImageTk.PhotoImage(im)
#設定labelimg為圖片作顯示(下方會提到)
labelimg.configure(image=photo)
labelimg.image = photo
#設定text1為檔名作顯示(下方會提到)
#filename.split("/")[-1]的意思是,將路徑的/前方砍掉,只留下檔名。
text1.set(filename.split("/")[-1])
接著於函數下方(函數外面)設定tkinter的Button:
b2 = tk.Button(window, text='open', font=('Arial', 12), width=10, height=1, command=OpenFile)
b2.pack()
注意藍色處,意思就是按下去後執行剛剛的OpenFile函數。
設定剛才OpenFile函數中的text1,為顯示檔名的label。
text1 = StringVar()
label1 = tk.Label(window,textvariable=text1, text='1799', font=('Arial', 12), width=100, height=8)
label1.pack()
設定剛才OpenFile函數中的labelimg,它是顯示圖片用的。
labelimg = tk.Label(window, image="")
labelimg.pack()
設定視窗為無限循環(一直保持開啟的狀態直到使用者關閉視窗)
window.mainloop()
由上整理出完整的程式碼如下:
import cv2
import numpy as np
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import StringVar, IntVar
from tkinter.filedialog import askopenfilename
window = tk.Tk()
window.title('圖片顯示')
window.geometry('450x700')
def OpenFile():
#這是圖片檔的路徑
filename = askopenfilename()
#用cv2載入圖片,我們不用imread,因為它不支援中文。
img = cv2.imdecode(np.fromfile(filename,dtype=np.uint8), cv2.IMREAD_COLOR)
#將cv2的BGR轉成RGB
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#重新調整圖片大小
img=cv2.resize(img,(450,280))
#將img載入為PIL的格式。
im = Image.fromarray(img)
#將img載入到ImageTK中
photo = ImageTk.PhotoImage(im)
#設定labelimg為圖片作顯示
labelimg.configure(image=photo)
labelimg.image = photo
#設定text1為檔名作顯示
#filename.split("/")[-1]的意思是,將路徑的/前方砍掉,只留下檔名。
text1.set(filename.split("/")[-1])
b2 = tk.Button(window, text='open', font=('Arial', 12), width=10, height=1, command=OpenFile)
b2.pack()
text1 = StringVar()
label1 = tk.Label(window,textvariable=text1, text='1799', font=('Arial', 12), width=100, height=8)
label1.pack()
labelimg = tk.Label(window, image="")
labelimg.pack()
window.mainloop()
現在來執行一次程式看看吧!
按下執行,可以看到一個視窗,有個按鈕。
按下open按鈕之後,有個對話視窗可以顯示欲選擇的圖片。
我們選擇的當然是頁面上唯一的一張立華奏彈鋼琴圖啦~
選擇了之後,就會看到我那張超讚的立華奏的圖被畫到tkinter的視窗上去了。
如果覺得立華奏很讚,或這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。
您的支持是我寫文的最大動力。
如果失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。
希望這篇文有幫助到各位ξ( ✿>◡❛)