Gedacht ist das ganze als Comic-Vorleser (espeak liest Text vor).
Ich möchte sowohl das Bild in einem Photoimage als auch den dazugehörigen Text möglichst elegant umschalten können, bis jetzt mache ich das mit .config().
Meine Frage: geht der Tkinter-Code so oder geht das eleganter?
Code: Alles auswählen
import Tkinter as t
import PIL.Image
import PIL.ImageTk
import os
f=file("liste2.txt")
#Jede Zeile in diesem file soll das Format haben:
#filename | Beschreibung (langer Text)
#Beispiel:
#foto.png | das ist ein Foto von einem Hund
liste = []
while True:
line = f.readline()
if len(line)==0:
break
worte = line.split("|")
liste.append((worte[0].strip(), worte[1]))
f.close()
class App:
def __init__(self, master):
frame = t.Frame(master)
frame.pack()
self.bildnummer = 0
self.bildobjekt = PIL.Image.open(liste[self.bildnummer][0])
self.photo = PIL.ImageTk.PhotoImage(self.bildobjekt)
self.bildname=t.Label(frame, text=liste[self.bildnummer][0])
self.bildname.pack(side=t.TOP)
self.bildplatz=t.Label(frame, image=self.photo)
self.bildplatz.pack(side=t.TOP)
self.schriftplatz=t.Label(frame, text=liste[self.bildnummer][1])
self.schriftplatz.pack(side=t.TOP)
self.button = t.Button(frame, text="Quit",
fg="red", command=frame.quit)
self.button.pack(side=t.LEFT)
self.sprich=t.Button(frame, text="vorlesen", command=self.vorlesen)
self.sprich.pack(side=t.LEFT)
self.bildwechsel = t.Button(frame, text="naechstes Bild", command=self.bild_weiter)
self.bildwechsel.pack(side=t.LEFT)
def vorlesen(self):
os.system('espeak'' ''"' +liste[self.bildnummer][1] +'"')
def bild_weiter(self):
self.bildnummer += 1
if self.bildnummer >= len(liste):
self.bildnummer = 0
self.bildobjekt = PIL.Image.open(liste[self.bildnummer][0])
self.photo = PIL.ImageTk.PhotoImage(self.bildobjekt)
self.bildplatz.config(image=self.photo)
self.bildname.config(text=liste[self.bildnummer][0])
self.schriftplatz.config(text=liste[self.bildnummer][1])
root = t.Tk()
app = App(root)
root.mainloop()
root.destroy()