I am trying to run a script that seems to work for others, but not me: https://gist.github.com/terencewu/034e09f0e318c621516b
I have all the packages installed on my mac, using python3 pip, os is 10.15.7.
The only change I've made to the script is to put in a path to a folder with some pictures in it.
When I run the script, I don't get any errors, and the Python terminal prints the full correct paths, but no slideshow. I'm using IDLE 3.9.1.
I would be very grateful for any suggestions as to how to get the script working.
Here's the code (curr_dir contains 3 jpg files):
import tkinter as tk
from PIL import Image, ImageTk
import time
import sys
import os
class HiddenRoot(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
#hackish way, essentially makes root window
#as small as possible but still "focused"
#enabling us to use the binding on <esc>
self.wm_geometry("0x0+0+0")
self.window = MySlideShow(self)
self.window.startSlideShow()
class MySlideShow(tk.Toplevel):
def __init__(self, *args, **kwargs):
tk.Toplevel.__init__(self, *args, **kwargs)
#remove window decorations
self.overrideredirect(True)
#save reference to photo so that garbage collection
#does not clear image variable in show_image()
self.persistent_image = None
self.imageList = []
self.pixNum = 0
#used to display as background image
self.label = tk.Label(self)
self.label.pack(side="top", fill="both", expand=True)
self.getImages()
def getImages(self):
curr_dir = "/Users/kenpeel/Pictures/testpics/FolderA/FolderA1"
for root, dirs, files in os.walk(curr_dir):
for f in files:
if f.endswith(".png") or f.endswith(".jpg"):
img_path = os.path.join(root, f)
print(img_path)
self.imageList.append(img_path)
def startSlideShow(self, delay=4): #delay in seconds
myimage = self.imageList[self.pixNum]
self.pixNum = (self.pixNum + 1) % len(self.imageList)
self.showImage(myimage)
#its like a callback function after n seconds (cycle through pics)
self.after(delay*1000, self.startSlideShow)
def showImage(self, filename):
image = Image.open(filename)
img_w, img_h = image.size
scr_w, scr_h = self.winfo_screenwidth(), self.winfo_screenheight()
width, height = min(scr_w, img_w), min(scr_h, img_h)
image.thumbnail((width, height), Image.ANTIALIAS)
#set window size after scaling the original image up/down to fit screen
#removes the border on the image
scaled_w, scaled_h = image.size
self.wm_geometry("{}x{}+{}+{}".format(scaled_w,scaled_h,0,0))
# create new image
self.persistent_image = ImageTk.PhotoImage(image)
self.label.configure(image=self.persistent_image)
slideShow = HiddenRoot()
slideShow.bind("<Escape>", lambda e: slideShow.destroy()) # exit on esc
slideShow.mainloop()
The IDLE shell prints the paths, but there are no other errors:
/Users/kenpeel/Pictures/testpics/FolderA/FolderA1/PICT0001.jpg
/Users/kenpeel/Pictures/testpics/FolderA/FolderA1/PICT0002.jpg
/Users/kenpeel/Pictures/testpics/FolderA/FolderA1/PICT0003.jpg
>>>
It seems it could be Mac OS compatability with Pillow and tkinter?