用tkinter实现简单的图片浏览器

我们需要做一个图片查看器,那么首先要能显示图片,所以需要一个能将文件夹中的图片load到程序中,
在程序界面上需要一个能显示图片的控件,这样至少 能显示一张图片了。要实现查看功能,那就得可以左右切换图片,
因此需要俩按扭来控制。再加一行能显示当前图片和总图片张数,就更完美了。
以上分析做完了,那我们就开始码代码吧

 

import  tkinter as tk
#此处需要引入glob库,此库的作用见下面注释
import  glob
#此处需要引入Image库,imageTk类
from  PIL  import  Image,ImageTk

'''
我们需要做一个图片查看器,那么首先要能显示图片,所以需要一个能将文件夹中的图片load到程序中,
在程序界面上需要一个能显示图片的控件,这样至少 能显示一张图片了。要实现查看功能,那就得可以左右切换图片,
因此需要俩按扭来控制。再加一行能显示当前图片和总图片张数,就更完美了。
以上分析做完了,那我们就开始码代码吧
'''
#先画一个能显示所有内容的载体,即使用Tk的属性可以画一个面板
#这里用到了geometry,通过查资料,geometry('wxh +x +y') w为宽度,h为高度,中间那个是小写的x,大写的X或者*均不可以。
#+x表示距离屏幕左边的距离,-x表示距离屏幕右边的距离,
#+y表示距离屏幕上边的距离,-y表示距离屏幕下边的距离,
root = tk.Tk()
root.geometry('1080x960+100+100')
root.title('图片查看器')

'''
glob()函数,是种文件通配符,非常常用。glob模块提供了函数用于从目录通配符搜索中生成文件列表:

Python glob()函数用法

glob()函数可以查找符合自己要求的文件,

支持通配符操作*,**,?,[]这四个通配符,
'''
photos = glob.glob('photo/*.jpg')
print(photos)
#打开图片Image.open函数
'''
由于PhotoImage不支持jpg格式的问题,因此,这里需要用到Image + ImageTk 来实现
将上述photos图片列表中的图片进行遍历,然后通过Image.open函数打开每一张图片
再通过ImageTk.PhotoImage来加载图片对像,赋值给photoss
'''
photoss = [ImageTk.PhotoImage(Image.open(photo)) for photo in photos]
print(photoss)

current_photo_no = 0
#此处用来将photoss的序号为0的图片显示在界面的lable上,并设置图片显示的宽度和高度
photo_lable = tk.Label(root,image = photoss[current_photo_no],width = 1080,height = 800)
photo_lable.pack()

number_var = tk.StringVar()
#number_var.set('1 of 4')
#此处用来显示当前图片序号和总图片数量
number_var.set(f'{current_photo_no + 1} of {len(photos)}')
tk.Label(root,textvariable = number_var,bd = 1,relief = tk.SUNKEN,anchor = tk.CENTER).pack(fill = tk.X)

#在界面上显示两个按扭,用来操作图片的切换
button_frame = tk.Frame(root)
button_frame.pack()
prev_photo = tk.Button(button_frame,text='上一页')
next_photo = tk.Button(button_frame,text='下一页')
prev_photo.pack(side = tk.LEFT,anchor = tk.CENTER)
next_photo.pack(side = tk.RIGHT,anchor = tk.CENTER)

'''
定义一个函数,用来实现点击按扭切换图片
切换图片实际上是给photoss赋值不同的地址
'''
def change_photos(next_no):
    global  current_photo_no
    current_photo_no += next_no
    if current_photo_no >= len(photos):
        current_photo_no = 0

    if current_photo_no < 0:
        current_photo_no = len(photos) - 1

    number_var.set(f'{current_photo_no + 1} of {len(photos)}')
    photo_lable.configure(image = photoss[current_photo_no])

#此处为两个按扭绑定相应的操作函数
prev_photo.config(command = lambda: change_photos(-1))
next_photo.config(command = lambda: change_photos(1))
root.mainloop()

代码编译成.exe文件和源码,我已上传至个人资源,有需要可以下载。

注意:在exe运行时,需要将图片资源和.exe文件放在同一目录下。

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使Tkinter窗口居中,可以使用以下代码: ```python from tkinter import * class MyFrm(Frame): def __init__(self, master): self.root=master self.screen_width = self.root.winfo_screenwidth() self.screen_height = self.root.winfo_screenheight() self.root.update_idletasks() self.root.withdraw() self.root.geometry('%dx%d+%d+%d' % (self.root.winfo_width(), self.root.winfo_height(), (self.screen_width - self.root.winfo_width()) / 2, (self.screen_height - self.root.winfo_height()) / 2)) self.root.deiconify() if __name__=='__main__': root=Tk() MyFrm(root) root.mainloop() ``` 在这个代码中,我们首先获得屏幕的宽度和高度,然后计算出窗口应该位于屏幕中心的位置,并使用`geometry`方法来设置窗口的位置。具体而言,`geometry`方法的参数是一个字符串,以`%dx%d+%d+%d`的格式指定窗口的宽度、高度、左上角的x坐标和y坐标。通过将窗口的宽度和高度设置为`self.root.winfo_width()`和`self.root.winfo_height()`,我们可以确保窗口的尺寸不会改变。而将窗口的左上角的x坐标和y坐标设置为`(self.screen_width - self.root.winfo_width()) / 2`和`(self.screen_height - self.root.winfo_height()) / 2`,我们可以将窗口放置在屏幕的中心位置。 请注意,上述代码中的`MyFrm`类是继承自`Frame`的自定义类,我们在类的初始化方法`__init__`中实现了窗口居中的功能。 另外,引用和引用中提到的`screen_height=root.winfo_screenheight()-100`和`screen_height = root.winfo_screenheight() - 100`并没有被使用到。因此,我们只需关注上述所提供的代码实现即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值