【问题标题】:Kivy: How to create a widget on_start with with height: self.minimum_heightKivy:如何使用高度创建小部件 on_start:self.minimum_height
【发布时间】:2021-09-04 18:22:11
【问题描述】:

我这周刚学会了 python 和 kivy/kivymd,所以我在为我确信是非常基本的东西而苦苦挣扎。

我正在尝试创建一张卡片 on_start,它在大多数情况下都可以正常工作,但我还需要将 height 设置为 minimum_height 以及设置 pos_hint(这两条注释掉的行,但显然它不会是 self在这种情况下为 .minimum_height;这是从我的 .kv 文件中复制过来的)。

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.card import MDCard


class MainApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "LightGreen"
        self.theme_cls.primary_hue = "700"
        return Builder.load_file("main.kv")


    def on_start(self):
        self.root.ids.main_grid.add_widget(MDCard(
            size_hint_x = 1,
            size_hint_y = None,
            adaptive_height = True,
            # height = self.minimum_height,
            # pos_hint = {"center_x" = .5}
            spacing = 5,
            padding = 30,
            elevation = 18,
            ripple_behavior = True
        ))
        

MainApp().run()

我不知道如何分配 pos_hint 使其不会引发语法错误。

身高,我试过设置

    def on_start(self):
        veg = self.root.ids.main_grid.add_widget(MDCard(
            size_hint_x = 1,
            size_hint_y = None,
            adaptive_height = True,
            # height = self.minimum_height,
            # pos_hint = {"center_x" = .5}
            spacing = 5,
            padding = 30,
            elevation = 18,
            ripple_behavior = True
        ))

然后添加

veg.height = veg.minimum_height

返回

AttributeError: 'NoneType' object has no attribute 'minimum_height'

其他一切都很好。如果没有设置这两个属性,我可以运行它并且卡片显示得很好。它只是尺寸不正确。它期待什么输入?

【问题讨论】:

    标签: python kivy kivy-language kivymd


    【解决方案1】:

    属性adaptive_height 没有为MDCard 定义。你的 pos_hint 只是字典的语法不好。尝试改变:

    pos_hint = {"center_x" = .5}
    

    到:

    pos_hint = {"center_x": .5}
    

    在您的代码中,height = self.minimum_height 试图将MDCardheight 设置为Appminimum_heightself 是该方法中的MainApp)。一种更简单的方法是在kv 中为MDCard 定义一个规则。像这样:

    <MyMDCard>:
        size_hint_x: 1
        size_hint_y: None
        height: self.minimum_height
    

    并将MyMDCard定义为:

    class MyMDCard(MDCard):
        pass
    

    那么,on_start() 方法就变成了:

    def on_start(self):
        self.root.ids.main_grid.add_widget(MyMDCard(
            pos_hint = {"center_x": .5},
            spacing=5,
            padding=30,
            elevation=18,
            ripple_behavior=True
        ))
    

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多