代码要点:

  1. 使用tkinter的Label显示图片;
  2. tkinter的PhotoImage支持的图片格式较少,使用pillow扩展库的Image和ImageTk弥补了这个缺点。

代码

  1. import os
  2. import tkinter
  3. import tkinter.messagebox
  4. from PIL import Image, ImageTk
  5. # 创建tkinter应用程序窗口
  6. root = tkinter.Tk()
  7. # 设置窗口大小和位置
  8. root.geometry('430x650+40+30')
  9. # 不允许改变窗口大小
  10. root.resizable(False, False)
  11. # 设置窗口标题
  12. root.title('使用Label显示图片')
  13. # 获取当前文件夹中所有图片文件列表
  14. suffix = ('.jpg', '.bmp', '.png')
  15. pics = [p for p in os.listdir('.') if p.endswith(suffix)]
  16. current = -1
  17. def changePic(flag):
  18. '''flag=-1表示上一个,flag=1表示下一个'''
  19. global current
  20. new = current + flag
  21. if new<0:
  22. tkinter.messagebox.showerror('', '这已经是第一张图片了')
  23. elif new>=len(pics):
  24. tkinter.messagebox.showerror('', '这已经是最后一张图片了')
  25. else:
  26. # 获取要切换的图片文件名
  27. pic = pics[new]
  28. # 创建Image对象并进行缩放
  29. im = Image.open(pic)
  30. w, h = im.size
  31. # 这里假设用来显示图片的Label组件尺寸为400*600
  32. if w>400:
  33. h = int(h*400/w)
  34. w = 400
  35. if h>600:
  36. w = int(w*600/h)
  37. h = 600
  38. im = im.resize((w,h))
  39. # 创建PhotoImage对象,并设置Label组件图片
  40. im1 = ImageTk.PhotoImage(im)
  41. lbPic['image'] = im1
  42. lbPic.image = im1
  43. current = new
  44. # “上一张”按钮
  45. def btnPreClick():
  46. changePic(-1)
  47. btnPre = tkinter.Button(root, text='上一张', command=btnPreClick)
  48. btnPre.place(x=100, y=20, width=80, height=30)
  49. # “下一张”按钮
  50. def btnNextClick():
  51. changePic(1)
  52. btnNext = tkinter.Button(root, text='下一张', command=btnNextClick)
  53. btnNext.place(x=230, y=20, width=80, height=30)
  54. # 用来显示图片的Label组件
  55. lbPic = tkinter.Label(root, text='test', width=400, height=600)
  56. changePic(1)
  57. lbPic.place(x=10, y=50, width=400, height=600)
  58. # 启动消息主循环
  59. root.mainloop()

运行截图:

Python使用tkinter编写图片浏览程序 - 图1