Python實(shí)現(xiàn)圖片瀏覽和選擇工具
實(shí)現(xiàn)將截圖預(yù)覽,并按照順序加入一個(gè)pdf文件中,實(shí)現(xiàn)照片管理尤其對(duì)于喜歡看教程截圖做筆記的網(wǎng)友們。
界面展示
一、核心結(jié)構(gòu)概述
主類 ImageViewer(wx.Frame)
是主窗口類,繼承自 wx.Frame
包括左側(cè)文件瀏覽和圖片列表、右側(cè)圖片預(yù)覽區(qū)域。
支持的圖片格式:['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff']
二、左側(cè)區(qū)域(圖片選擇與操作)
1. 打開文件夾按鈕
self.btn_open = wx.Button(self.panel, label="打開文件夾") self.btn_open.Bind(wx.EVT_BUTTON, self.on_open_dir)
打開目錄,綁定 on_open_dir() 函數(shù)。
使用 wx.DirDialog 選擇目錄,讀取支持格式的圖片,顯示到 ListBox1。
2. 當(dāng)前路徑顯示
self.path_text = wx.StaticText(self.panel, label="當(dāng)前路徑: ")
顯示當(dāng)前選擇的圖片文件夾路徑。
3. ListBox1 — 圖片列表
self.listbox1 = wx.ListBox(...) self.listbox1.Bind(wx.EVT_LISTBOX, self.on_select_image1) self.listbox1.Bind(wx.EVT_LISTBOX_DCLICK, self.on_move_to_listbox2)
單擊:預(yù)覽該圖片。
雙擊:將圖片添加到 ListBox2。
4. ListBox2 — 已選圖片
self.listbox2 = wx.ListBox(...) self.listbox2.Bind(wx.EVT_LISTBOX, self.on_select_image2)
單擊:預(yù)覽。
存放用戶選擇的用于合并 PDF 的圖片。
5. 移動(dòng)按鈕(上下移動(dòng)排序)
self.btn_up.Bind(wx.EVT_BUTTON, self.on_move_up) self.btn_down.Bind(wx.EVT_BUTTON, self.on_move_down)
可重新排列 ListBox2 中的圖片順序(影響 PDF 順序)。
6. 合并PDF按鈕
self.btn_pdf = wx.Button(...) self.btn_pdf.Bind(wx.EVT_BUTTON, self.on_create_pdf)
用于觸發(fā)將 ListBox2 中圖片合并生成 PDF 的邏輯(on_create_pdf() 需要你提供或補(bǔ)全)。
三、右側(cè)區(qū)域(圖片預(yù)覽)
使用 ScrolledPanel 可滾動(dòng)區(qū)域顯示圖片
self.scroll_panel = scrolled.ScrolledPanel(...) self.img_preview = wx.StaticBitmap(...)
ScrolledPanel 允許在圖片較大時(shí)滾動(dòng)查看。
img_preview 是顯示縮略圖的主要控件。
四、主要方法詳解
1.on_open_dir():打開文件夾,調(diào)用 load_images()
2.load_images():遍歷文件夾,篩選支持的圖片擴(kuò)展名并按字母排序
3.on_select_image1() 和 on_select_image2():從 ListBox1 或 ListBox2 中選取圖片后調(diào)用 display_image() 進(jìn)行預(yù)覽
4.display_image(img_path)
使用 PIL 打開圖片,根據(jù)最大尺寸 (480x580) 縮放顯示
轉(zhuǎn)為 wx.Image -> wx.Bitmap -> 顯示在 img_preview 上
支持 RGB 和 RGBA 格式
5.on_move_to_listbox2():將 ListBox1 中雙擊的圖片名稱添加到 ListBox2,防止重復(fù)
6.on_move_up() / on_move_down():更改 ListBox2 中圖片順序,影響 PDF 合并順序
五、缺失但預(yù)期存在的方法
on_create_pdf()
該方法雖然綁定了按鈕,但代碼未貼出。預(yù)期功能:
- 獲取 ListBox2 中圖片完整路徑;
- 使用 reportlab 創(chuàng)建 PDF 頁(yè)面;
- 每頁(yè)插入一張圖片(需縮放到 A4 頁(yè)面);
- 保存到文件。
def on_create_pdf(self, event): output_path = os.path.join(self.current_dir, "output.pdf") c = canvas.Canvas(output_path, pagesize=A4) width, height = A4 for i in range(self.listbox2.GetCount()): filename = self.listbox2.GetString(i) img_path = os.path.join(self.current_dir, filename) try: pil_img = Image.open(img_path) img_w, img_h = pil_img.size scale = min(width / img_w, height / img_h) new_w = img_w * scale new_h = img_h * scale c.drawImage(img_path, (width - new_w) / 2, (height - new_h) / 2, new_w, new_h) c.showPage() except Exception as e: wx.MessageBox(f"無法添加圖片:{filename}\n{str(e)}", "錯(cuò)誤", wx.ICON_ERROR) c.save() wx.MessageBox("PDF合并完成!", "成功", wx.ICON_INFORMATION)
到此這篇關(guān)于Python實(shí)現(xiàn)圖片瀏覽和選擇工具的文章就介紹到這了,更多相關(guān)Python圖片瀏覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3.4實(shí)現(xiàn)郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了python3.4實(shí)現(xiàn)郵件發(fā)送功能,含帶中文附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Python連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單便捷方法
在數(shù)據(jù)分析過程中往往要操作較大的數(shù)據(jù)集,這就需要連接數(shù)據(jù)庫(kù)進(jìn)行操作,下面這篇文章主要給大家介紹了關(guān)于Python連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單便捷方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對(duì)調(diào), 其乘積不變
這篇文章主要介紹了Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對(duì)調(diào), 其乘積不變,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署
這篇文章主要介紹了Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python如何終止死循環(huán)和開啟死循環(huán)
這篇文章主要介紹了python如何終止死循環(huán)和開啟死循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Python astype(np.float)函數(shù)使用方法解析
這篇文章主要介紹了Python astype(np.float)函數(shù)使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06基于Python利用Faker批量測(cè)試數(shù)據(jù)
這篇文章主要介紹了基于Python利用Faker批量測(cè)試數(shù)據(jù)。測(cè)試過程中,經(jīng)常需要批量去造數(shù)據(jù),方法有很多,最簡(jiǎn)單方便的應(yīng)該是使用python?的一個(gè)三方庫(kù)Faker。下面我們就來看看三方庫(kù)Faker如何批量測(cè)試數(shù)據(jù),需要的朋友可以參考一下2022-03-03Python使用Pyqt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器(最新版本測(cè)試過)
這篇文章主要介紹了Python使用Pyqt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器(最新版本測(cè)試過),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示
這篇文章主要為大家詳細(xì)介紹了Python?PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-12-12