动态更改添加到网格布局的小部件的背景颜色

问题描述 投票:0回答:1

早上好......

将自定义小部件添加到 kivy 网格布局的列时遇到一些麻烦。我仍在学习 kivy/kivyMD,之前可以使用 PYQT6 轻松完成此操作。

当我的主页打开时,我正在读取 SQLite 数据库并在网格布局中加载记录内容。我知道您可以通过为添加的每个小部件设置背景属性来实现此目的,但在我的情况下,我的自定义小部件具有 Buttonbehavior 和一个图像小部件,我用它来在网格布局中显示和可单击图像。我读到一篇文章说您可以通过将background_normal设置为“”并将background_color设置为颜色列表来设置背景,但这对我不起作用。我尝试在加载记录内容时动态设置 canvas.before 和 canvas.after,但这也弄乱了我的屏幕。

当前发生的情况是图像确实在我的网格布局中正确显示,但背景颜色不起作用。奇数行设置的背景颜色原本是 [.78, .85, .92, 1] 的颜色列表,这也不起作用。

像往常一样,非常感谢任何建议。

谢谢

main.py:(页面显示后的底部函数)

def show_service_schedule(self):

    # Read Service Schedule

    self.schedule_recs = DataRtns.get_records("schedule")

    if len(self.schedule_recs) > 0:

        self.ids.scrollgrid.rows = len(self.schedule_recs)

        # Adjust Scrollview height if rows are less than 5

        if self.ids.scrollgrid.rows < 5:

            # Adjust Title padding as well

            if self.ids.scrollgrid.rows == 1:
                self.ids.title.padding = [0, 0, 0, dp(90)]
            else:
                dp_val = self.ids.scrollgrid.row_default_height * self.ids.scrollgrid.rows + 60
                self.ids.title.padding = [0, 0, 0, dp(dp_val)]

            self.ids.scroll.height = self.ids.scrollgrid.row_default_height * self.ids.scrollgrid.rows

        recCtr = 0

        for rec in self.schedule_recs:

            if recCtr % 2 > 0:

                addr_col = ClickLabel()
                addr_col.text = rec[2]
                addr_col.padding = [5, 0]
                addr_col.md_bg_color = "#c5d8ea"

                city_col = ClickLabel()
                city_col.text = rec[3]
                city_col.padding = [40, 0]
                city_col.md_bg_color = "#c5d8ea"

                type_col = ClickLabel()
                type_col.text = rec[4]
                type_col.padding = [20, 0]
                type_col.md_bg_color = "#c5d8ea"

                stat_col = StatButton()
                stat_col.background_normal = ""
                stat_col.background_color = "#c5d8ea"
                stat_col.source = self.get_image(rec[4], rec[6])

            else:

                addr_col = ClickLabel(text=rec[2], padding=[5, 0])
                city_col = ClickLabel(text=rec[3], padding=[40, 0])
                type_col = ClickLabel(text=rec[4], padding=[20, 0])

                stat_col = StatButton()
                stat_col.background_normal = ""
                stat_col.background_color = [.9, .9, .9, 1]
                stat_col.source = self.get_image(rec[4], rec[6])


            self.ids.scrollgrid.add_widget(addr_col)
            self.ids.scrollgrid.add_widget(city_col)
            self.ids.scrollgrid.add_widget(type_col)
            self.ids.scrollgrid.add_widget(stat_col)

            recCtr += 1

    else:

        self.ids.title.padding = [0, 0, 0, dp(90)]

        self.ids.scrollgrid.cols = 1
        self.ids.scrollgrid.rows = 1
        self.ids.scroll.height = dp(36)

        self.schedule_recs = []

        no_records_col = MDLabel(text="- No Records Exist -", halign="center")
        self.ids.scrollgrid.add_widget(no_records_col)

自定义小部件:

class StatButton(ButtonBehavior, Image):
    def on_release(self):
        print("Image clicked ...")
python kivy kivymd
1个回答
0
投票

我通过使用 MDRectangleFlatIconButton 解决了这个问题,它为我提供了我需要的一切。我最初使用的 Buttonbehavior 虽然为我提供了小部件的可点击功能,但我仍然无法更改背景颜色,甚至在重做我的图像(也添加)后也没有正确填充网格布局列。

© www.soinside.com 2019 - 2024. All rights reserved.