Загрузка...

Помогите сделать MDTopAppBar в kivy

Тема в разделе Python создана пользователем Dima6282669 27 дек 2024. 152 просмотра

  1. Dima6282669
    Dima6282669 Автор темы 27 дек 2024 2 25 июн 2024
    main.py
    Python
    from kivymd.app import MDApp
    from kivy.lang import Builder
    from kivymd.uix.screen import MDScreen
    from kivy.core.window import Window

    class MainScreen(MDScreen):
    ...


    class MainApp(MDApp):
    def build(self):
    Window.size = (450, 700)
    return Builder.load_file('test_code/test_1.kv')


    MainApp().run()
    test_1.kv
    Python
    MainScreen:
    MDBoxLayout:
    orientation: 'horizontal'

    MDTopAppBar:
    title: 'text'
    pos_hint: {'top': 1}
    type: "small"

    MDTopAppBarLeadingButtonContainer:
    MDActionTopAppBarButton:
    icon: "menu"
    on_release: nav_drawer.set_state("toggle")

    MDTopAppBarTrailingButtonContainer:
    MDButton:
    pos_hint: {'right': 1, 'center_y': 0.5}
    MDButtonText:
    text: "Получить Premium"
    MDButtonIcon:
    icon: 'star-four-points'
    MDActionTopAppBarButton:
    icon: "account-circle-outline"

    Короче, проблема в том, что я хочу сделать, чтобы иконка "menu" находилась всегда слева, кнопка "получить премиум" по середине и иконка "аккаунта" всегда справа и чтобы все эти критерии при изменении экрана (по оси Х) адаптировались, но у меня это не получается сделать, они всегда все на месте стоят. Скажите пожалуйста, в чём проблема.
    [IMG]
     
    27 дек 2024 Изменено
  2. ФРУТС
    ФРУТС 27 дек 2024 <3 jenna ortega E> 544 7 фев 2023
    ай, глазам больно)
     
  3. Houkey
    Houkey 27 дек 2024 Заблокирован(а) 6854 12 окт 2022
    MainScreen:
    MDBoxLayout:
    orientation: 'vertical'

    MDTopAppBar:
    title: 'text'
    pos_hint: {'top': 1}
    type: "small"

    # Контейнер для размещения элементов внутри TopAppBar
    MDBoxLayout:
    orientation: 'horizontal'
    spacing: dp(10)

    # Иконка "menu" всегда слева
    MDActionTopAppBarButton:
    icon: "menu"
    on_release: nav_drawer.set_state("toggle")
    size_hint_x: None
    width: self.texture_size[0]

    # Пространство между "menu" и центром
    Widget:
    size_hint_x: None
    width: dp(10)

    # Кнопка "Получить Premium" всегда в центре
    MDBoxLayout:
    orientation: "horizontal"
    adaptive_size: True
    MDButton:
    on_release: app.show_premium()
    size_hint: None, None
    height: dp(40)
    width: dp(150)
    text: "Получить Premium"
    MDButtonIcon:
    icon: 'star-four-points'

    # Пространство между центром и правым краем
    Widget:
    size_hint_x: None
    width: dp(10)

    # Иконка "аккаунт" всегда справа
    MDActionTopAppBarButton:
    icon: "account-circle-outline"
    size_hint_x: None
    width: self.texture_size[0]
     
    1. Посмотреть предыдущие комментарии (6)
    2. Dima6282669 Автор темы
    3. Houkey
      Dima6282669,
      Проблема в вашем коде заключается в том, как элементы внутри MDTopAppBar размещаются. Вы правильно используете контейнеры для элементов, таких как MDTopAppBarLeadingButtonContainer и MDTopAppBarTrailingButtonContainer, но в коде, похоже, есть некоторые несоответствия в том, как вы структурируете компоненты и их позиционирование.
      Чтобы обеспечить правильную адаптивность и расположение элементов в MDTopAppBar, вам нужно следующее:

      Использовать правильные контейнеры: Когда вы хотите разместить элементы на различных частях экрана (слева, по центру, справа), необходимо правильно воспользоваться контейнерами и их параметрами.
      Использовать позиции с pos_hint для корректного выравнивания.
      Использовать корректные компоненты для текста и иконок, чтобы они правильно адаптировались к изменению размера экрана.
    4. Houkey
      Dima6282669,
      Код
      MainScreen:
      MDBoxLayout:
      orientation: 'vertical' # Смените на 'vertical' для нормальной работы в случае с AppBar

      MDTopAppBar:
      title: 'text'
      pos_hint: {'top': 1}
      type: "small"

      # Слева иконка меню
      MDTopAppBarLeadingButtonContainer:
      MDActionTopAppBarButton:
      icon: "menu"
      on_release: nav_drawer.set_state("toggle")

      # В центре кнопка "Получить Premium"
      MDTopAppBarCenterContainer:
      MDButton:
      text: "Получить Premium"
      on_release: print("Get Premium clicked")
      size_hint: None, None
      size: "200dp", "48dp"
      pos_hint: {"center_x": 0.5, "center_y": 0.5}

      # Справа иконка аккаунта
      MDTopAppBarTrailingButtonContainer:
      MDActionTopAppBarButton:
      icon: "account-circle-outline"
      проверь, если это не работает то обратись к людям которые занимаются програмированнием
      27 дек 2024 Изменено
    5. Посмотреть следующие комментарии (1)
Top
Загрузка...