Slideshow extended and reacts to 'q' now

This commit is contained in:
Balthasar Reuter
2015-06-18 23:49:59 +02:00
parent 0004a0571c
commit 4db70dcc38
2 changed files with 68 additions and 37 deletions

32
gui.py
View File

@@ -137,7 +137,7 @@ class GUI_PyGame:
# Store screen and size # Store screen and size
self.size = size self.size = size
self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN) self.screen = pygame.display.set_mode(size) #, pygame.FULLSCREEN)
# Clear screen # Clear screen
self.clear() self.clear()
@@ -188,6 +188,25 @@ class GUI_PyGame:
text.set_colorkey(bg) text.set_colorkey(bg)
self.surface_list.append((text, rect.topleft)) self.surface_list.append((text, rect.topleft))
def convert_event(self, event):
if event.type == pygame.QUIT:
return True, Event(0, 0)
elif event.type == pygame.KEYDOWN:
return True, Event(1, event.key)
elif event.type == pygame.MOUSEBUTTONUP:
return True, Event(2, (event.button, event.pos))
elif event.type >= pygame.USEREVENT:
return True, Event(3, event.channel)
else:
return False, ''
def check_for_event(self):
for event in EventModule.get():
r, e = self.convert_event(event)
if r:
return r, e
return False, ''
def wait_for_event(self): def wait_for_event(self):
# Repeat until a relevant event happened # Repeat until a relevant event happened
while True: while True:
@@ -198,14 +217,9 @@ class GUI_PyGame:
event = EventModule.wait() event = EventModule.wait()
# Return Event-Object # Return Event-Object
if event.type == pygame.QUIT: r, e = self.convert_event(event)
return Event(0, 0) if r:
elif event.type == pygame.KEYDOWN: return e
return Event(1, event.key)
elif event.type == pygame.MOUSEBUTTONUP:
return Event(2, (event.button, event.pos))
elif event.type >= pygame.USEREVENT:
return Event(3, event.channel)
def mainloop(self, filename, handle_keypress, handle_mousebutton, handle_gpio_event): def mainloop(self, filename, handle_keypress, handle_mousebutton, handle_gpio_event):

View File

@@ -24,38 +24,55 @@ display_time = 3
############### ###############
class Slideshow: class Slideshow:
def __init__(self, display_size, display_time, directory, recursive=True): def __init__(self, display_size, display_time, directory, recursive=True):
self.directory = directory self.directory = directory
self.recursive = recursive self.recursive = recursive
self.filelist = [] self.filelist = []
self.display = GuiModule("Slideshow", display_size) self.display = GuiModule("Slideshow", display_size)
self.display_time = display_time self.display_time = display_time
def scan(self): def scan(self):
filelist = [] filelist = []
if self.recursive: if self.recursive:
# Recursively walk all entries in the directory # Recursively walk all entries in the directory
for root, dirnames, filenames in os.walk(self.directory): for root, dirnames, filenames in os.walk(self.directory):
for filename in filenames: for filename in filenames:
filelist.append(os.path.join(root, filename)) filelist.append(os.path.join(root, filename))
else: else:
# Add all entries in the directory # Add all entries in the directory
for item in os.listdir(self.directory): for item in os.listdir(self.directory):
filename = os.path.join(self.directory, item) filename = os.path.join(self.directory, item)
if os.path.isfile(filename): if os.path.isfile(filename):
filelist.append(filename) filelist.append(filename)
self.filelist = filelist self.filelist = filelist
def run(self): def handle_event(self, event):
while True: if event.type == 0:
for filename in self.filelist: self.teardown()
self.display.clear() elif event.type == 1:
self.display.show_picture(filename) self.handle_keypress(event.value)
self.display.apply()
sleep(self.display_time)
def handle_keypress(self, key):
# Exit the application
if key == ord('q'):
self.teardown()
def run(self):
while True:
for filename in self.filelist:
self.display.clear()
self.display.show_picture(filename)
self.display.apply()
sleep(self.display_time)
r, e = self.display.check_for_event()
if r:
self.handle_event(e)
def teardown(self):
self.display.teardown()
exit(0)
################# #################
@@ -63,7 +80,7 @@ class Slideshow:
################# #################
def main(): def main():
slideshow = Slideshow(display_size, display_time, directory, False) slideshow = Slideshow(display_size, display_time, directory, True)
slideshow.scan() slideshow.scan()
slideshow.run() slideshow.run()
return 0 return 0