def add_picture(self, picture_path): # Create new picture button im = ImageButton(source=picture_path) # Old pictures layout management self.nb_pictures = self.nb_pictures + 1 if self.nb_pictures > max_pictures_in_bottom_layout: self.layout_bottom.remove_widget( self.layout_bottom.children[len(self.layout_bottom.children) - 1]) # Connecting on_press signal im.bind(on_press=self.display_picture_on_popup) # Adding new widget in old pictures layout self.layout_bottom.add_widget(im)
def build(self): self.nb_pictures = 0 # PROPOSAL 1 self.layout = BoxLayout(orientation='horizontal') ######################################## # LAYOUT PHOTOS ######################################## # Main photos layout for pictures display layout_photos = BoxLayout(orientation='vertical', spacing=5) # Last photo layout declaration self.last_photo = ImageButton(source='small_pictures/last_photo.jpg') # Connecting on_press signal self.last_photo.bind(on_press=self.display_picture_on_popup) # Layout containing max_pictures_in_bottom_layout pictures cols = int(max_pictures_in_bottom_layout / max_row_number_for_old_photos) self.layout_bottom = GridLayout(cols=cols, spacing=(5, 5)) # Adding sublayouts/widgets in the layout_photos layout_photos.add_widget(self.last_photo) layout_photos.add_widget(self.layout_bottom) ######################################## # LAYOUT BUTTONS ######################################## # Main button layout for pictures manipulations layout_buttons = BoxLayout(orientation='vertical', size_hint_x=.33) # Shortcut layout declaration one_photo_default_picture = ImageButton( source='small_pictures/default_1.jpg') one_photo_button = Button(text='Prendre 1 photo', size_hint=(1, .3)) four_photo_default_picture = ImageButton( source='small_pictures/default_2.jpg') four_photo_button = Button(text='Prendre 4 photos', size_hint=(1, .3)) # Adding widgets in the layout_photos layout_buttons.add_widget(one_photo_default_picture) layout_buttons.add_widget(one_photo_button) layout_buttons.add_widget(four_photo_default_picture) layout_buttons.add_widget(four_photo_button) # Shorcuts buttons clicked connections one_photo_default_picture.bind(on_press=self.take1) one_photo_button.bind(on_press=self.take1) four_photo_default_picture.bind(on_press=self.take4) four_photo_button.bind(on_press=self.take4) ######################################## # GENERAL ######################################## # Adding photos layout in the main layout self.layout.add_widget(layout_buttons) # Adding photos layout in the main layout self.layout.add_widget(layout_photos) ######################################## # APP ######################################## # Load application self.load() return self.layout
class SoPhotoApp(App): def build(self): self.nb_pictures = 0 # PROPOSAL 1 self.layout = BoxLayout(orientation='horizontal') ######################################## # LAYOUT PHOTOS ######################################## # Main photos layout for pictures display layout_photos = BoxLayout(orientation='vertical', spacing=5) # Last photo layout declaration self.last_photo = ImageButton(source='small_pictures/last_photo.jpg') # Connecting on_press signal self.last_photo.bind(on_press=self.display_picture_on_popup) # Layout containing max_pictures_in_bottom_layout pictures cols = int(max_pictures_in_bottom_layout / max_row_number_for_old_photos) self.layout_bottom = GridLayout(cols=cols, spacing=(5, 5)) # Adding sublayouts/widgets in the layout_photos layout_photos.add_widget(self.last_photo) layout_photos.add_widget(self.layout_bottom) ######################################## # LAYOUT BUTTONS ######################################## # Main button layout for pictures manipulations layout_buttons = BoxLayout(orientation='vertical', size_hint_x=.33) # Shortcut layout declaration one_photo_default_picture = ImageButton( source='small_pictures/default_1.jpg') one_photo_button = Button(text='Prendre 1 photo', size_hint=(1, .3)) four_photo_default_picture = ImageButton( source='small_pictures/default_2.jpg') four_photo_button = Button(text='Prendre 4 photos', size_hint=(1, .3)) # Adding widgets in the layout_photos layout_buttons.add_widget(one_photo_default_picture) layout_buttons.add_widget(one_photo_button) layout_buttons.add_widget(four_photo_default_picture) layout_buttons.add_widget(four_photo_button) # Shorcuts buttons clicked connections one_photo_default_picture.bind(on_press=self.take1) one_photo_button.bind(on_press=self.take1) four_photo_default_picture.bind(on_press=self.take4) four_photo_button.bind(on_press=self.take4) ######################################## # GENERAL ######################################## # Adding photos layout in the main layout self.layout.add_widget(layout_buttons) # Adding photos layout in the main layout self.layout.add_widget(layout_photos) ######################################## # APP ######################################## # Load application self.load() return self.layout def reload(self): self.last_photo.reload() def load(self): pictures_files = glob.glob('small_pictures/*/*.jpg') pictures_files.sort(key=os.path.getmtime) for picture_path in pictures_files: self.add_picture(picture_path) def add_picture(self, picture_path): # Create new picture button im = ImageButton(source=picture_path) # Old pictures layout management self.nb_pictures = self.nb_pictures + 1 if self.nb_pictures > max_pictures_in_bottom_layout: self.layout_bottom.remove_widget( self.layout_bottom.children[len(self.layout_bottom.children) - 1]) # Connecting on_press signal im.bind(on_press=self.display_picture_on_popup) # Adding new widget in old pictures layout self.layout_bottom.add_widget(im) def take1(self, instance): print('Take 1 picture') # Create Popup Progress popup_progress = PopupProgress(title='', separator_height=0) popup_progress.bind(on_open=self.start_preview) popup_progress.start_progress(3) # Connection dismiss signal on take_one_photo_action popup_progress.bind(on_dismiss=self.take_one_photo_action) # Open Popup Progress popup_progress.open() def take4(self, instance): print('take 4 pictures') self.images = [] popup_progress = PopupProgressFour(title='', separator_height=0, photomaton=self) popup_progress.bind(on_open=self.start_preview) popup_progress.bind(on_dismiss=self.four_photo_assembly) popup_progress.start_progress(15) popup_progress.open() def start_preview(self, instance): if faking_it: pass else: photo.start_preview() def take_one_photo_action(self, instance): if faking_it: image = pilImage.open('raw_pictures/default_picture.jpg') else: image = photo.take_photo() photo.stop_preview() # Display last picture taken self.add_picture(image_editor.apply_big_picture_mask(image)) self.reload() def take_one_of_four_photo_action(self): if faking_it: image = pilImage.open('raw_pictures/default_picture.jpg') else: image = photo.take_photo() self.images.append(image) def four_photo_assembly(self, instance): if faking_it: pass else: photo.stop_preview() self.add_picture(image_editor.apply_4_pictures_mask(self.images)) self.reload() def display_picture_on_popup(self, instance): # Main popup layout layout_popup = BoxLayout(orientation='vertical', spacing=5) # Create popup layout content back_to_main_button = Button(text='<-', size_hint=(.2, .2)) # Adding contents into popup layout layout_popup.add_widget(back_to_main_button) layout_popup.add_widget(ImageButton(source=instance.source)) # Create popup popup = Popup(title='', separator_height=0, content=layout_popup) # Bind the on_press event of the button to the dismiss function back_to_main_button.bind(on_press=popup.dismiss) # Open popup popup.open()