早上好......
将自定义小部件添加到 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 ...")
我通过使用 MDRectangleFlatIconButton 解决了这个问题,它为我提供了我需要的一切。我最初使用的 Buttonbehavior 虽然为我提供了小部件的可点击功能,但我仍然无法更改背景颜色,甚至在重做我的图像(也添加)后也没有正确填充网格布局列。