Ich habe eben mal eine kleine Slideshow gebastelt, weil ich so was für ein Programm brauche. Nur leider hab ich das Problem, dass die Bilder ziemlich flackern, woran kann das denn liegen? Hab die Tage erst mit Python und Tkinter angefangen, aber es gefällt mir eigentlich sehr gut. Geht das nicht besser, oder mach ich nur etwas falsch.
Der Kode ist noch nicht sehr sauber, bitte entschuldigt das.
Die Klasse Move liest ein Verzeichnis ein, in meinem Fall (und wenn mans nicht ändern will) einfach ein Verzeichnis media/slide1 erzeugen und ein paar Bilder reinpacken (müssen noch die gleiche Größe haben). Die Größe der Bilder kann es noch nicht anpassen, darauf freu ich mich schon

Code: Alles auswählen
import Tkinter as tk
from PIL import Image, ImageTk
from time import sleep
from thread import start_new_thread
from os import listdir
class Move:
def __init__(self, dir, speed):
self.cur_alpha = 0
self.cur_count = 1
self.count2 = 0
self.speed = speed
self.canvas = tk.Canvas(root, width=500, height=425)
# verzeichnis einlesen
self.filelist = []
for file in listdir('media/slide1/'):
self.filelist.append("%s%s"%(dir,file))
self.filecount = len(self.filelist)
if self.filecount >= 2:
# bild erzeugen
self.img1 = Image.open(self.filelist[0])
self.img2 = Image.open(self.filelist[1])
img = ImageTk.PhotoImage(self.img1)
self.bild = self.canvas.create_image(50,50, image=img, anchor="nw")
self.canvas.pack()
print start_new_thread(self.image_smooth_action,())
def image_smooth_action(self):
try:
while 1:
self.chg_alpha()
new = ImageTk.PhotoImage(Image.blend(self.img1, self.img2, self.cur_alpha))
self.canvas.itemconfigure(self.bild, image=new)
sleep(.3)
except:
pass
def chg_alpha(self):
# bild erst mal ein paar sekunden anzeigen
if self.cur_alpha == 0 and self.count2 < 10:
self.count2 += 1
else:
# ein bild langsam ueberblenden
if self.cur_alpha < .9:
self.cur_alpha += self.speed
# bild ist komplett ueberblendet, naechstes anzeigen
else:
self.count2 = 0
self.cur_alpha = 0
if self.cur_count < self.filecount-1:
self.cur_count +=1
bild1 = self.cur_count-1
bild2 = self.cur_count
else:
bild1 = self.cur_count
bild2 = 0
self.cur_count = 0
self.img1 = Image.open(self.filelist[bild1])
self.img2 = Image.open(self.filelist[bild2])
new = ImageTk.PhotoImage(self.img1)
self.canvas.itemconfigure(self.bild, image=new)
# root fenster erzeugen
root = tk.Tk()
# slideshow objekt erzeugen
slideshow = Move("media/slide1/", .1)
# der dolle mainloop
root.mainloop()
Grüße und in Hoffnung auf eine Antwort
andieh