2021年1月31日 星期日

用tkinter開視窗選擇要顯示的圖片及檔名

標題: 用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的視窗上去了。


如果覺得立華奏很讚,或這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。

您的支持是我寫文的最大動力。

如果失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。


希望這篇文有幫助到各位ξ( ✿>◡❛)

沒有留言:

張貼留言

有興趣或有疑問的歡迎提問與交流喔!!!