【问题标题】:Positioning a text field inside a toolbar in Kivy在 Kivy 的工具栏中定位文本字段
【发布时间】:2022-06-12 02:34:27
【问题描述】:

我正在尝试使用 KivyMD 将文本字段放在工具栏内,但文本字段总是直接靠在窗口的右侧。我试图用 pos_hint 调整它,但我为 x 坐标设置的值都没有移动它。

Screen:
canvas.before:
    Rectangle:
        pos: self.pos
        size: self.size
        source: 'assets/bg.png'

BoxLayout:
    orientation: 'vertical'
    MDToolbar:
        id: toolbar
        title: 'Placeholder'
        elevation: 10
        pos_hint: {"top": 1}

        left_action_items: [['menu', lambda x: app.menu.open()]]

        MDTextFieldRound:
            id: textinput
            icon_left: 'magnify'
            pos_hint: {'x': 0.1 ,'center_y': 0.5, 'right': 0.3}
            size_hint: {.6, .4}
            text_color: 'white'
            hint_text: 'Search'**strong text**
        
    MDLabel:
        text: 'Placeholder'
        color: 'white'
        halign: 'center'

Screenshot of toolbar

感谢您的帮助。

【问题讨论】:

    标签: kivy kivymd


    【解决方案1】:

    您可以将小部件插入到任何您想要的位置,为此您可以在小部件树中指定一个位置 - add_widget(widget, index)。我为您的解决方案编写了一个特殊的 get_widgets 函数,它遍历了类中的所有小部件。在下面的示例中,您可以将文本字段放置在左侧、右侧和中间。还要检查MDToolbar source code

    from kivy.lang.builder import Builder
    from kivy.metrics import dp
    from kivy.clock import Clock
    from kivy.weakproxy import WeakProxy
    
    from kivymd.app import MDApp
    from kivymd.uix.boxlayout import MDBoxLayout
    from kivymd.uix.textfield import MDTextField
    
    KV = """
    MDScreen:
        MDBoxLayout:
            orientation: 'vertical'
            MDToolbar:
                id: toolbar
                title: 'Placeholder'
                pos_hint: {"top": 1}
                
            MDLabel:
                text: 'Placeholder'
                color: 'white'
                halign: 'center'
    """
    
    
    class TestApp(MDApp):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.search_content = None
    
        def build(self):
            return Builder.load_string(KV)
    
        def on_start(self):
            Clock.schedule_once(lambda dt: self.add_search('left'))
    
        @staticmethod
        def get_widgets(root: WeakProxy, class_: str):
            """
            :param root: root widget
            :param class_: which subclass are we looking for
            :return:
            """
    
            widgets = []
            for widget in root.walk():
                if widget.__class__.__name__ == class_:
                    widgets.append(widget)
                    print(widget)
    
            return widgets
    
        def add_search(self, side: str):
            """
            :param side: left/right/center
            :return:
            """
            box = self.get_widgets(self.root.ids.toolbar, 'MDBoxLayout')[0]  # get root `MDBoxLayout`
    
            if side == 'left':
                index = 2
            elif side == 'right':
                index = 1
            else:
                index = 0
                box.remove_widget(self.root.ids.toolbar.ids.label_title)
    
            boxlayout = MDBoxLayout(padding=[dp(18), dp(0), dp(18), dp(18)])
            self.search_content = MDTextField(icon_left='magnify',
                                              mode='round',
                                              color_mode="custom",
                                              line_color_normal=(1, 0, 1, 1),
                                              line_color_focus=(0, 0, 1, 1),
                                              text_color_focus=self.theme_cls.text_color,
                                              text_color_normal=self.theme_cls.text_color[0:3] + [0.7],
                                              hint_text='Empty field',
                                              )
    
            boxlayout.add_widget(self.search_content)
            box.add_widget(boxlayout, index)
    
    
    TestApp().run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多