照片后缀名问题

因为1.png只是单纯的改了后缀名,而没有改变图片本身编码,所以有时候在程序中不会展现出。因此证明就算改了后缀名,png的本质也不一定是png。

下面这是Label和Button应用示例:简易图片浏览器

他不能够识别jpg文件,所以需要另存为gif格式,记得不能直接改后缀名

# -*- coding: utf-8 -*-
# @Time : 2022/11/15 19:24
# @Author:未晞~
# @Software: PyCharm
import os
import tkinter as tk       #导入tkinter模块
class Application(tk.Frame):  #定义GUI应用程序类,派生于Frame类
    def __init__(self, master=None):       #构造函数,master为父窗口
        self.files = os.listdir(r'E:\Python\nterm\ch12\image') #获取图像文件名列表
        self.index = 0               #图片索引,初始显示第一张图片
        self.img = tk.PhotoImage(file=r'E:\Python\nterm\ch12\image' + '\\' + self.files[self.index])
        tk.Frame.__init__(self, master) #调用父类的构造函数
        self.pack()                 #调用组件的pack方法,调整其显示位置和大小
        self.createWidgets()                           #调用对象方法,创建子组件
    def createWidgets(self):                            #对象方法:创建子组件
        self.lblImage = tk.Label(self, height=500) #创建Label组件,显示图片
        self.lblImage['image'] = self.img                #显示第一张图片
        self.lblImage.pack()        #调用组件的pack方法,调整其显示位置和大小
        self.f = tk.Frame()                         #创建窗口框架
        self.f.pack()               #调用组件的pack方法,调整其显示位置和大小
        self.btnPrev = tk.Button(self.f, text='上一张', command=self.prev) #创建按钮组件
        self.btnPrev.pack(side=tk.LEFT)
        self.btnNext = tk.Button(self.f, text='下一张', command=self.next) #创建按钮组件
        self.btnNext.pack(side=tk.LEFT)
    def prev(self):         #定义事件处理程序
        self.showfile(-1)   #显示上一张图片
    def next(self):         #定义事件处理程序
        self.showfile(1)    #显示下一张图片
    def showfile(self, n):    #显示图片
        self.index += n
        if self.index < 0: self.index = len(self.files) - 1   #循环显示最后一张
        if self.index > len(self.files) - 1: self.index = 0   #循环显示第一张
        self.img = tk.PhotoImage(file=r'E:\Python\nterm\ch12\image' + '\\' + self.files[self.index])
        self.lblImage['image'] = self.img
root = tk.Tk()                #创建一个Tk根窗口组件root
root.title('简易图片浏览器')    #设置窗口标题
app = Application(master=root)  #创建Application的对象实例
app.mainloop()  #调用组件的mainloop方法,进入事件循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值