【问题标题】:Kivy: bind method inside the .kv fileKivy:.kv 文件中的绑定方法
【发布时间】:2017-12-01 16:53:55
【问题描述】:

我想从我的 .py 文件中删除这一行:

self.layout.bind(minimum_height=self.layout.setter('height'))

并用相同的指令替换它,但在 .kv 文件中。有什么方法可以将self.layout.setter('height') 绑定到minimum_height 吗?

【问题讨论】:

    标签: kivy


    【解决方案1】:

    怎么样?

    height: self.minimum_height
    

    我猜你在 ScrollView 中使用它。如果为真,这应该有效。 例如,请参阅这篇文章 https://stackoverflow.com/a/45313388/6646710,它正是使用了这个。

    【讨论】:

      【解决方案2】:

      要使布局高度适应子小部件的高度,您只需执行以下操作:

      height: self.minimum_height
      

      示例:

      • 只有 python 代码:

        from kivy.app import App
        from kivy.uix.gridlayout import GridLayout
        from kivy.uix.button import Button
        from kivy.uix.boxlayout import BoxLayout 
        from kivy.uix.scrollview import ScrollView
        
        
        
        class RootWidget(BoxLayout):
            def __init__(self, **kwargs): 
                super(RootWidget, self).__init__(**kwargs)
                self.orientation = "vertical"
                self.sv = ScrollView()
                self.btn = Button(text="Addd button", size_hint_y=0.1, 
                                              on_press = self.add_button)
                self.layout = GridLayout(cols = 1, size_hint_y= None, 
                                                    row_default_height= 100)
                self.layout.bind(minimum_height=self.layout.setter('height'))
                self.add_widget(self.sv)
                self.add_widget(self.btn)
                self.sv.add_widget(self.layout)
        
            def add_button(self, instance):
                self.layout.add_widget(Button())
        
        
        class TestApp(App):
            def build(self):
                return RootWidget()
        
        if __name__ == '__main__':
            TestApp().run()
        
      • 使用 Kivy Languaje:

        ma​​in.py:

        from kivy.app import App
        from kivy.uix.gridlayout import GridLayout
        from kivy.uix.button import Button
        from kivy.uix.boxlayout import BoxLayout 
        
        
        
        class RootWidget(BoxLayout):
            def __init__(self, **kwargs): 
                super(RootWidget, self).__init__(**kwargs)
        
            def add_button(self):
                self.layout.add_widget(Button())
        
        
        class TestApp(App):
            def build(self):
                return RootWidget()
        
        if __name__ == '__main__':
            TestApp().run()
        

        test.kv:

        <RootWidget>:
            orientation: "vertical"
            layout: glayout
            ScrollView:
                GridLayout
                    id: glayout
                    cols:1
                    row_default_height: 100
                    size_hint_y: None
                    height: self.minimum_height  # <<<<<<<<<<<<<<<<
        
            Button:
                text: "Add button"
                on_press: root.add_button()
                size_hint_y: 0.1
        

      【讨论】:

        【解决方案3】:

        您可以在 .kv 文件中执行height: self.minimum_height。请记住,有时您还必须设置 size_hint_y: None 才能看到所需的效果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-04
          • 1970-01-01
          • 1970-01-01
          • 2020-07-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多