欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)圖片瀏覽和選擇工具

 更新時(shí)間:2025年05月19日 14:02:26   作者:winfredzhang  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)一個(gè)圖片瀏覽和選擇工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

實(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ā)送功能

    python3.4實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了python3.4實(shí)現(xiàn)郵件發(fā)送功能,含帶中文附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python打包發(fā)布pypi及更新全部流程

    python打包發(fā)布pypi及更新全部流程

    這篇文章主要介紹了python打包發(fā)布pypi及更新全部流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Python連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單便捷方法

    Python連接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-04
  • Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對(duì)調(diào), 其乘積不變

    Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對(duì)調(diào), 其乘積不變

    這篇文章主要介紹了Python3實(shí)現(xiàn)個(gè)位數(shù)字和十位數(shù)字對(duì)調(diào), 其乘積不變,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

    Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署

    這篇文章主要介紹了Python基于Webhook實(shí)現(xiàn)github自動(dòng)化部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python如何終止死循環(huán)和開啟死循環(huán)

    python如何終止死循環(huán)和開啟死循環(huán)

    這篇文章主要介紹了python如何終止死循環(huán)和開啟死循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Python astype(np.float)函數(shù)使用方法解析

    Python 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ù)

    這篇文章主要介紹了基于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-03
  • Python使用Pyqt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器(最新版本測(cè)試過)

    Python使用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ī)則窗口的顯示

    一文詳解PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示

    這篇文章主要為大家詳細(xì)介紹了Python?PyQt5中實(shí)現(xiàn)不規(guī)則窗口的顯示的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-12-12

最新評(píng)論