最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實現(xiàn)一個圖片查看器

 更新時間:2025年02月18日 10:35:15   作者:席子哥哥的代碼庫  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)一個簡單的圖片查看器,并且可以實現(xiàn)圖片放大與縮小功能,感興趣的小伙伴可以了解下

效果圖

圖片格式:支持常見的圖片格式(JPG、PNG、BMP、GIF)。

完整代碼

import os
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
 
class ImageViewer:
    def __init__(self, root):
        self.root = root
        self.root.title("圖片查看器")
        self.root.geometry("800x600")
        self.root.configure(bg="#2E3440")  # 設置背景顏色
 
        # 當前圖片路徑
        self.current_image_path = None
        self.image = None
        self.photo = None
        self.scale_factor = 1.0
        self.is_auto_scaling = True  # 是否自動縮放
 
        # 創(chuàng)建界面
        self.create_widgets()
 
    def create_widgets(self):
        """創(chuàng)建界面組件"""
        # 頂部工具欄
        toolbar = tk.Frame(self.root, bg="#3B4252")  # 工具欄背景顏色
        toolbar.pack(side=tk.TOP, fill=tk.X)
 
        # 打開按鈕
        btn_open = tk.Button(toolbar, text="打開", command=self.open_image, bg="#81A1C1", fg="white", activebackground="#5E81AC", activeforeground="white", font=("微軟雅黑", 12))
        btn_open.pack(side=tk.LEFT, padx=5, pady=5)
 
        # 放大按鈕
        btn_zoom_in = tk.Button(toolbar, text="放大", command=self.zoom_in, bg="#81A1C1", fg="white", activebackground="#5E81AC", activeforeground="white", font=("微軟雅黑", 12))
        btn_zoom_in.pack(side=tk.LEFT, padx=5, pady=5)
 
        # 縮小按鈕
        btn_zoom_out = tk.Button(toolbar, text="縮小", command=self.zoom_out, bg="#81A1C1", fg="white", activebackground="#5E81AC", activeforeground="white", font=("微軟雅黑", 12))
        btn_zoom_out.pack(side=tk.LEFT, padx=5, pady=5)
 
        # 圖片顯示區(qū)域
        self.canvas = tk.Canvas(self.root, bg="#2E3440", highlightthickness=0)
        self.canvas.pack(fill=tk.BOTH, expand=True)
 
        # 綁定窗口大小變化事件
        self.root.bind("<Configure>", self.on_window_resize)
 
    def open_image(self):
        """打開圖片"""
        file_path = filedialog.askopenfilename(
            title="選擇圖片",
            filetypes=[("圖片文件", "*.jpg *.jpeg *.png *.bmp *.gif")]
        )
        if file_path:
            self.current_image_path = file_path
            self.load_image()
 
    def load_image(self):
        """加載圖片"""
        try:
            self.image = Image.open(self.current_image_path)
            self.scale_factor = 1.0
            self.is_auto_scaling = True  # 加載圖片時啟用自動縮放
            self.update_image()
        except Exception as e:
            messagebox.showerror("錯誤", f"無法加載圖片: {str(e)}")
 
    def update_image(self):
        """更新顯示的圖片"""
        if self.image:
            # 計算縮放后的尺寸
            canvas_width = self.canvas.winfo_width()
            canvas_height = self.canvas.winfo_height()
            image_width, image_height = self.image.size
 
            if self.is_auto_scaling:
                # 自動縮放時計算縮放比例
                width_ratio = canvas_width / image_width
                height_ratio = canvas_height / image_height
                self.scale_factor = min(width_ratio, height_ratio)
 
            # 縮放圖片
            width = int(image_width * self.scale_factor)
            height = int(image_height * self.scale_factor)
            resized_image = self.image.resize((width, height), Image.Resampling.LANCZOS)
            self.photo = ImageTk.PhotoImage(resized_image)
 
            # 清除畫布并顯示圖片
            self.canvas.delete("all")
            self.canvas.create_image(
                canvas_width // 2,
                canvas_height // 2,
                anchor=tk.CENTER,
                image=self.photo
            )
 
    def zoom_in(self):
        """放大圖片"""
        if self.image:
            self.is_auto_scaling = False  # 手動縮放時禁用自動縮放
            self.scale_factor *= 1.2
            self.update_image()
 
    def zoom_out(self):
        """縮小圖片"""
        if self.image:
            self.is_auto_scaling = False  # 手動縮放時禁用自動縮放
            self.scale_factor /= 1.2
            self.update_image()
 
    def on_window_resize(self, event):
        """窗口大小變化時自動調(diào)整圖片大小"""
        if self.image and self.is_auto_scaling:
            self.update_image()
 
if __name__ == "__main__":
    root = tk.Tk()
    app = ImageViewer(root)
    root.mainloop() 

到此這篇關于使用Python實現(xiàn)一個圖片查看器的文章就介紹到這了,更多相關Python圖片查看器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python-can中Notifier類的實現(xiàn)報文的實時分發(fā)

    python-can中Notifier類的實現(xiàn)報文的實時分發(fā)

    文章介紹了利用python-can庫中的Notifier類創(chuàng)建一個線程來從總線讀取CAN消息,并通過回調(diào)函數(shù)將消息分發(fā)給監(jiān)聽對象,具有一定的參考價值,感興趣的可以了解一下
    2026-04-04
  • 基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能

    基于OpenCV實現(xiàn)小型的圖像數(shù)據(jù)庫檢索功能

    下面就使用VLAD表示圖像,實現(xiàn)一個小型的圖像數(shù)據(jù)庫的檢索程序。下面實現(xiàn)需要的功能模塊,分步驟給大家介紹的非常詳細,對OpenCV圖像數(shù)據(jù)庫檢索功能感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Python使用pandas導入csv文件內(nèi)容的示例代碼

    Python使用pandas導入csv文件內(nèi)容的示例代碼

    這篇文章主要介紹了Python使用pandas導入csv文件內(nèi)容,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 使用Python將PDF表格提取到文本,CSV和Excel文件中

    使用Python將PDF表格提取到文本,CSV和Excel文件中

    本文將介紹如何使用簡單的Python代碼從PDF文檔中提取表格數(shù)據(jù)并將其寫入文本、CSV和Excel文件,從而輕松實現(xiàn)PDF表格的自動化提取,有需要的可以參考下
    2024-11-11
  • Python中關于集合的介紹與常規(guī)操作解析

    Python中關于集合的介紹與常規(guī)操作解析

    Python除了List、Tuple、Dict等常用數(shù)據(jù)類型外,還有一種數(shù)據(jù)類型叫做集合(set),集合的最大特點是:集合里邊的元素是不可重復的并且集合內(nèi)的元素還是無序的
    2021-09-09
  • 基于Python制作IP查詢網(wǎng)站

    基于Python制作IP查詢網(wǎng)站

    這篇文章主要為大家詳細介紹了如何使用python快速做一個簡易查內(nèi)網(wǎng)IP網(wǎng)站,通過電腦訪問網(wǎng)站就知道自己的IP地址,感興趣的小伙伴可以了解下
    2024-10-10
  • 基于Python+Dify實現(xiàn)批量OCR識別的自動化解決方案

    基于Python+Dify實現(xiàn)批量OCR識別的自動化解決方案

    在日常工作中,我們經(jīng)常會遇到大量圖片格式的PDF文件,這類文件無法直接復制文本,手動逐頁OCR識別效率極低,下面我們看看如何使用Python和Dify實現(xiàn)全自動化解決這一問題吧
    2025-12-12
  • python多進程(加入進程池)操作常見案例

    python多進程(加入進程池)操作常見案例

    這篇文章主要介紹了python多進程(加入進程池)操作,結合常見案例形式分析了Python多進程復制文件、加入進程池及多進程聊天等相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • 關于python中密碼加鹽的學習體會小結

    關于python中密碼加鹽的學習體會小結

    這篇文章主要介紹了關于python中密碼加鹽的學習體會小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python之Pygame的Draw繪圖

    Python之Pygame的Draw繪圖

    Pygame 中提供了一個draw模塊用來繪制一些簡單的圖形狀,比如矩形、多邊形、圓形、直線、弧線等。本文主要介紹Pygame中的Draw繪圖,感興趣的同學可以參考閱讀
    2023-04-04

最新評論

长白| 土默特左旗| 团风县| 八宿县| 胶州市| 垦利县| 青铜峡市| 基隆市| 陵水| 扶风县| 乐至县| 简阳市| 松原市| 新田县| 武汉市| 达拉特旗| 安岳县| 玛沁县| 莆田市| 龙口市| 绥化市| 南充市| 印江| 昌乐县| 忻城县| 东城区| 东乡族自治县| 水城县| 广州市| 榕江县| 高陵县| 个旧市| 齐河县| 志丹县| 南木林县| 红桥区| 临洮县| 全州县| 彰武县| 宁明县| 故城县|