Search code examples
python-3.xlayoutalignmentkivymd

KivyMD MDBoxLayout Alignment Issue


In an MDBoxLayout, I am attempting to align 4 widgets.
Here is my code for the layout:

class MusicPlayer(MDBoxLayout):
    def __init__(self, file):
        super().__init__(orientation='horizontal', spacing=10, padding=5, size_hint_y=None)
        
        self.file = file

        self.progress_bar = MDSlider(min=0, max=100, show_off=False)
        self.elapsed_label = MDLabel(text='0:00', size_hint_x=0.2)
        self.remaining_label = MDLabel(text='0:00', size_hint_x=0.2)

        self.add_widget(MDIconButton(icon='play', on_press=self.play_pause))
        self.add_widget(self.elapsed_label)
        self.add_widget(self.progress_bar)
        self.add_widget(self.remaining_label)

    def play_pause(self, button):
        button.icon = 'pause' if button.icon == 'play' else 'play'

And here is the result:

Layout result

As you can see, the MDIconButton is not aligned with the rest of the widgets, and the first MDLabel is slightly higher than the rest of the widgets. Any help to align these widgets would be greatly appreciated!


Solution

  • class MusicPlayer(MDBoxLayout):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.spacing = 10
            self.padding = 5
            self.size_hint_y = None
            self.md_bg_color = (0, 1, 1, 0.3)
    
            self.progress_bar = MDSlider(min=0, max=100, show_off=False)
    
            self.elapsed_label = MDLabel(text='0:00', pos_hint={"center_y": 0.5}, size_hint=(None, None))
            self.elapsed_label.text_size = (None, None)
            self.elapsed_label.height = self.elapsed_label.texture_size[1]
    
            self.remaining_label = MDLabel(text='0:00', pos_hint={"center_y": 0.5}, size_hint=(None, None))
            self.remaining_label.text_size = (None, None)
            self.remaining_label.height = self.remaining_label.texture_size[1]
    
            self.add_widget(MDIconButton(icon='play', pos_hint={"center_y": 0.5}))
            self.add_widget(self.elapsed_label)
            self.add_widget(self.progress_bar)
            self.add_widget(self.remaining_label)
    

    enter image description here