main.py 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() 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 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" 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" находилась всегда слева, кнопка "получить премиум" по середине и иконка "аккаунта" всегда справа и чтобы все эти критерии при изменении экрана (по оси Х) адаптировались, но у меня это не получается сделать, они всегда все на месте стоят. Скажите пожалуйста, в чём проблема.
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]
Dima6282669, Проблема в вашем коде заключается в том, как элементы внутри MDTopAppBar размещаются. Вы правильно используете контейнеры для элементов, таких как MDTopAppBarLeadingButtonContainer и MDTopAppBarTrailingButtonContainer, но в коде, похоже, есть некоторые несоответствия в том, как вы структурируете компоненты и их позиционирование. Чтобы обеспечить правильную адаптивность и расположение элементов в MDTopAppBar, вам нужно следующее: Использовать правильные контейнеры: Когда вы хотите разместить элементы на различных частях экрана (слева, по центру, справа), необходимо правильно воспользоваться контейнерами и их параметрами. Использовать позиции с pos_hint для корректного выравнивания. Использовать корректные компоненты для текста и иконок, чтобы они правильно адаптировались к изменению размера экрана.
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" Код 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" проверь, если это не работает то обратись к людям которые занимаются програмированнием