KivyMD icon indicating copy to clipboard operation
KivyMD copied to clipboard

Tab contents MDBoxLayout adaptive_width mis-layout.

Open RobertFlatt opened this issue 4 months ago • 2 comments

Description of the Bug

An MDBoxLayout in tabs content is mis-layedout when adaptive_width = True. In this case the intent is for "Button in BoxLayout" to be located centrally in the space below "Button 2"

adaptive_size correctly lays out the BoxLayout if the design intent is for the layout to behave as if there is no BoxLayout.

Code and Logs

from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView

from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.button import MDButton, MDButtonText
from kivymd.uix.tab import (
    MDTabsItemIcon,
    MDTabsItemText,
    MDTabsItem,
)

KV = '''
MDScreen:
    md_bg_color: self.theme_cls.backgroundColor
    MDBoxLayout:
        orientation:'vertical'
        MDTabsPrimary:
            id: tabs
            pos_hint: {"center_x": .5, "center_y": .5}
            MDDivider:
            MDTabsCarousel:
                id: related_content_container
                size_hint_y: None
                height: dp(320)
        MDLabel:
            text:'Button BoxLayout has adaptive_width = True.'
            halign:'center'
'''

class Example(MDApp):
    def on_start(self):
        super().on_start()
        self.root.ids.tabs.add_widget(
            MDTabsItem(MDTabsItemText(text='A Tab')))
        
        bl = MDBoxLayout(orientation='vertical',
                         size_hint_y=None)
        bl.bind(minimum_height=bl.setter('height'))
        for i in range(3):
            bl.add_widget(MDButton(MDButtonText(text='Button '+str(i)),
                                   pos_hint={"center_x": .5, "center_y": .5}))

        bl2 = MDBoxLayout(orientation='horizontal',
                          pos_hint = {'center_x':0.5},
                          adaptive_width = True)
        bl2.add_widget(MDButton(MDButtonText(text='Button in BoxLayout'),
                                pos_hint={"center_x": .5, "center_y": .5}))
        bl.add_widget(bl2)
        
        sv = ScrollView()
        sv.add_widget(bl)
        self.root.ids.related_content_container.add_widget(sv)

    def build(self):
        self.theme_cls.primary_palette = "Olive"
        return Builder.load_string(KV)


Example().run()

Screenshots

issue5

Versions

  • OS: Windows 11
  • Python: Python 3.11.1
  • Kivy: 2.3.0
  • KivyMD: 2.0.1.dev0

RobertFlatt avatar Apr 02 '24 02:04 RobertFlatt