支持在Python中使用TKinter显示图像幻灯片

时间:2016-09-22 08:49:36

标签: python tkinter gif

我正在尝试制作一组​​代码,这些代码将打开一个窗口并按顺序一次又一次地显示6个图像,持续10秒。这是我的代码,但程序只是打开一个空白屏幕。我该怎么办?

import time

import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
width = root.winfo_screenwidth()
height = root.winfo_screenwidth()
root.geometry('%dx%d' % (width*1, height*1))

def SS_Part1():
    image_file_ssp1 = "goat1.gif"
    image = tk.PhotoImage(file=image_file_ssp1)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()

def SS_Part2():
    image_file_ssp2 = "goat2.gif"
    image = tk.PhotoImage(file=image_file_ssp2)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()

def SS_Part3():
    image_file_ssp3 = "goat3.gif"
    image = tk.PhotoImage(file=image_file_ssp3)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()

def SS_Part4():
    image_file_ssp4 = "goat4.gif"
    image = tk.PhotoImage(file=image_file_ssp4)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()

def SS_Part5():
    image_file_ssp5 = "goat5.gif"
    image = tk.PhotoImage(file=image_file_ssp5)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()

def SS_Part6():
    image_file_ssp6 = "goat6.gif"
    image = tk.PhotoImage(file=image_file_ssp6)
    canvas = tk.Canvas(root, height=height*1, width=width*1, bg="black")
    canvas.create_image(width*1/2, height*1/2, image=image)
    canvas.pack()




t_end = time.time() + 10
while time.time() < t_end:

    SS_Part1()
    time.sleep(0.05)
    SS_Part2()
    time.sleep(0.05)
    SS_Part3()
    time.sleep(0.05)
    SS_Part4()
    time.sleep(0.05)
    SS_Part5()
    time.sleep(0.05)
    SS_Part6()

root.mainloop()

1 个答案:

答案 0 :(得分:0)

这些是您的代码中的一些更改,它应该可以正常工作。

import tkinter as tk
from itertools import cycle

# foreign library, need to installed
from ImageTk import PhotoImage

images = ["first1.jpg", "first2.jpg", "first3.jpg", "first4.jpg"]
photos = cycle(PhotoImage(file=image) for image in images)

def slideShow():
  img = next(photos)
  displayCanvas.config(image=img)
  root.after(50, slideShow) # 0.05 seconds

root = tk.Tk()
root.overrideredirect(True)
width = root.winfo_screenwidth()
height = root.winfo_screenwidth()
root.geometry('%dx%d' % (640, 480))
displayCanvas = tk.Label(root)
displayCanvas.pack()
root.after(10, lambda: slideShow())
root.mainloop()

这是上述代码的面向对象版本, 推荐 。下面的代码将完美适用于全屏幻灯片

from itertools import cycle
import tkinter as tk

# foreign library, need to installed
from ImageTk import PhotoImage 

images = [ "first1.jpg", "first2.jpg", "first3.jpg", "first4.jpg"]

class Imagewindow(tk.Tk):
  def __init__(self):
    tk.Tk.__init__(self)
    self.photos = cycle(
      PhotoImage(file=image) for image in images
    )
    self.displayCanvas = tk.Label(self)
    self.displayCanvas.pack()

  def slideShow(self):
    img = next(self.photos)
    self.displayCanvas.config(image=img)
    self.after(50, self.slideShow) # 0.05 seconds

  def run(self):
    self.mainloop()


root = Imagewindow()
width = root.winfo_screenwidth()
height = root.winfo_screenwidth()
root.overrideredirect(True)
root.geometry('%dx%d' % (width*1, height*1))
root.slideShow()
root.run()