Проблема выравнивания виджетов внутри столбца GridLayout и обеспечения одинаковой ширины всех виджетов в kivy, есть ли способ обойти это?

#widget #position #alignment #kivy-language #grid-layout

Вопрос:

Ниже приведена упрощенная версия приложения, которое я создаю. Проблема, с которой я сталкиваюсь, находится во второй колонке таблицы:

Я использую различные типы виджетов; Spinner, MDTextFieldRound,кнопка mdroundflat (для выбора даты и времени)

Виджеты не выравниваются в одной и той же начальной позиции внутри столбца, второй столбец

Я хочу, чтобы они выровнялись слева, как метки в первом столбце

Я также хотел бы, чтобы они были одинаковой ширины, независимо от того, какой это виджет.

size_hint_x или просто size_hint, похоже, не работает.

Есть какие-нибудь предложения относительно того, как я могу это решить?

Файл KV

 Screen:
    MDNavigationLayout:
    ScreenManager:
        id: screen_manager
        size_hint: 1, 1
        pos_hint: {"top": 1, "left": 1}
        Event_Screen:
            name: "eventscreen"

<Event_Screen>:
    BoxLayout:
        orientation: "vertical"
        size_hint: (0.6,0.8)
        pos_hint: {"center_x": 0.5, "center_y": 0.5}            
        canvas.before:
            Color: 
                rgba:(30/255, 31/255, 30/255,1)
            Rectangle:
                size: self.size
                pos: self.pos
        padding: 19
        spacing: 19
        

        MDLabel:
            id: Events_options
            text: "Events"
            font_size: 40
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
        
        ScrollView:
            size_hint_y: 0.75
            do_scroll_x: False
            do_scroll_y: True
            GridLayout:
                cols: 2
                padding: 10
                spacing: 10
                size_hint_y: None
                height: self.minimum_height
                pos_hint: {"center_x": 0.3, "center_y": 0.7}
                row_force_default: True
                row_default_height: 40

                MDLabel:
                    id: Event_list
                    text: "Event List"
                    font_size: 14
                    halign: 'left'
                    size_hint_y: None
                    height: self.texture_size[1]
                    size_hint_x: None
                    width: 200                

                Spinner:
                    id: Event_list_spin_id
                    pos: self.parent.pos
                    size_hint: None, None
                    size: (220,30)                        
                    text: "Select"
                    halign: 'center'
                    background_normal: ''
                    background_color: (0,0,0,0)
                    canvas.before:
                        Color: 
                            rgba:(125/255,185/255,219/255,1)
                        RoundedRectangle:
                            size: self.size
                            pos: self.pos
                            radius: [19]
                    values: ["Garden","Woodland","Forest"]
                    
                
                MDLabel:
                    id: Event_ref_id
                    text: "Event reference"
                    font_size: 14
                    halign: 'left'
                    size_hint_y: None
                    height: self.texture_size[1]
                    size_hint_x: None
                    width: 200
                
                MDTextFieldRound:
                    id: Event_ref_textf
                    hint_text: "Event reference"
                    icon_right: "account"
                    size_hint_x: None
                    width: 200
                    font_size: 18

                
                
                
                MDLabel:
                    id: Event_date_id
                    text: "Event date"
                    font_size: 14
                    halign: 'left'
                    size_hint_y: None
                    height: self.texture_size[1]
                    size_hint_x: None
                    width: 200

                MDRoundFlatButton:
                    text: "Open Date Picker"
                    font_size: 12
                    on_release:
                        root.event_date_picker()

                
                MDLabel:
                    id: Event_time_id
                    text: "Event Time"
                    font_size: 14
                    halign: 'left'
                    size_hint_y: None
                    height: self.texture_size[1]
                    size_hint_x: None
                    width: 200

                MDRoundFlatButton:
                    text: "Open Time Picker"
                    font_size: 12
                    on_release:
                        root.show_event_time_picker()

                MDLabel:
                    id: event_auth_id
                    text: "Event Authorization"
                    font_size: 14
                    halign: 'left'
                    size_hint_y: None
                    height: self.texture_size[1]
                    size_hint_x: None
                    width: 200
                
                MDTextFieldRound:
                    id: event_auth_textf
                    hint_text: "Event Authorization"
                    icon_right: "account"
                    size_hint_x: None
                    width: 200
                    font_size: 14
 

Файл Python

 from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,ScreenManager
from kivymd.uix.picker import MDDatePicker
from kivymd.uix.picker import MDTimePicker
from kivy.properties import ListProperty
from kivy.lang import Builder

    
class Event_Screen(Screen):

    # Card Start Date
    # click ok
    def event_on_save(self,instance,value,date_range):
        print("Event date: {0}".format(value))

    # click cancel
    def event_on_cancel(self,instance,value):
        print("You cancelled event date")
    
    # try also passing a value for variable to the on_save below
    def event_date_picker(self):
        date_dialog = MDDatePicker()
        date_dialog.bind(on_save=self.event_on_save, on_cancel=self.event_on_cancel)
        date_dialog.open()


    # Get time
    def event_get_time(self,instance,time):
        print("Deposit time: {0}".format(time))
    # Cancel
    def event_time_cancel(self,instance,time):
        print("You canceled the time picker")

    def show_event_time_picker(self):
        time_dialog = MDTimePicker()
        time_dialog.bind(on_cancel=self.event_time_cancel,time = self.event_get_time)
        time_dialog.open()

class GridLayoutAPP(MDApp):
    def build(self):
        self.title = "GridLayout"
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = 'Green'
        
  
GridLayoutAPP().run()