Ich beobachte gerad ein seltsames Verhalten eines Programmes. Dieses Programm habe ich zu Testzwecken schnell und völlig unstrukturiert zusammengekloppt. Aber es läuft!
Python
from tkinter import *
from PIL import ImageTk, Image as Img
import glob
root=Tk()
thumbs = glob.glob("/home/pi/Pictures/small_*.jpg")
thumbs.sort(reverse=True)
pointer = 1
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
items = len(thumbs)
def step_forward():
global pointer
global label
global img
pointer=pointer+1
if pointer == items:
pointer=0
label.grid_forget()
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
label.grid(row=0,column=1,padx=5,pady=10)
return
def step_backward():
global pointer
global label
global img
pointer=pointer-1
if pointer < 0:
pointer = items - 1
label.grid_forget()
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
label.grid(row=0,column=1,padx=5,pady=10)
return
btn_forward=Button(root,text="=>",command=step_forward,height=5,width=15)
btn_backward=Button(root,text="<=",command=step_backward,height=5,width=15)
label.grid(row=0,column=1,padx=5,pady=10)
btn_forward.grid(row=0,column=2)
btn_backward.grid(row=0,column=0)
root.mainloop()
Alles anzeigen
Der weitere Plan war, diesen Code ein wenig zu strukturieren:
Python
#!/usr/bin/env python3
from tkinter import *
from PIL import ImageTk, Image as Img
import glob
pointer = 1
def step_forward(root,label,img,thumbs):
global pointer
items = len(thumbs)
pointer=pointer+1
if pointer == items:
pointer=0
label.grid_forget()
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
label.grid(row=0,column=1,padx=5,pady=10)
return
def step_backward(root,label,img,thumbs):
global pointer
items = len(thumbs)
pointer=pointer-1
if pointer < 0:
pointer = items - 1
label.grid_forget()
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
label.grid(row=0,column=1,padx=5,pady=10)
return
def main():
try:
root=Tk()
thumbs = glob.glob("/home/pi/Pictures/small_*.jpg")
thumbs.sort(reverse=True)
img = ImageTk.PhotoImage(Img.open(thumbs[pointer]))
label = Label(root,image=img)
btn_forward=Button(root,text="=>",command=lambda:step_forward(root,label,img,thumbs),height=5,widt$
btn_backward=Button(root,text="<=",command=lambda:step_backward(root,label,img,thumbs),height=5,wi$
label.grid(row=0,column=1,padx=5,pady=10)
btn_forward.grid(row=0,column=2)
btn_backward.grid(row=0,column=0)
root.mainloop()
except KeyboardInterrupt:
pass
if __name__ == "__main__":
main()
Alles anzeigen
Das Programm läuft, aber sobald ich einen der Buttons klicke, verschwindet das aktuelle Image und lediglich ein leerer Bereich in der Größe des Bildes wird dargestellt.
Starte ich das Programm mit dem Thonny Debugger, und steppe mich durch, dann wird sehr wohl das nächste Bild dargestellt. Ich vermute mal, das ist irgend ein Timing Problem, weiß aber nicht wirklich ob ich damit richtig liege.
Ich hoffe, jemand kann mir hier eine Marschrichtung zur Lösung zeigen.