在ScrollView KivyMD下将MDlist文本居中

时间:2020-05-19 19:01:24

标签: python list kivy scrollview

我正在努力使文本在ScrollView中居中。

我的KV代码如下:

from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
from kivymd.uix.list import MDList, OneLineListItem

kv =""""
    ScrollView:
        do_scroll_x: False  # Important for MD compliance
        MDList:
            OneLineListItem:
                text: "Single-line item"
"""

class MainApp(MDApp):
    def build(self):
        sv = ScrollView()
        ml = MDList()
        sv.add_widget(ml)
        contacts = ["Paula", "John", "Kate", "Vlad"]
        for c in contacts:
            ml.add_widget(
                OneLineListItem(
                    text=c
                )
            )
        return sv

if __name__ == '__main__':
    MainApp().run()

这是屏幕上的样子: Centering Issue

请帮助!

2 个答案:

答案 0 :(得分:0)

https://github.com/HeaTTheatR/KivyMD/blob/master/kivymd/uix/list.py

OneListItem继承自BaseListItem,后者具有受保护的属性_txt_left_pad。这是一个受保护的变量,不应混淆,因为材料设计标准不允许列表项中居中的文本。但是它的python没什么能阻止您弄乱它,并增加左侧的填充,直到其居中或向内移动为止。可能还有其他方法可以通过使OneListItem的子项混乱并改变子项的繁荣来实现。

答案 1 :(得分:0)

一种实现方法是将OneLineListItem子类化,因此您可以添加halign自变量以进行水平对齐:

class OneLineListItemAligned(OneLineListItem):
    def __init__(self, halign, **kwargs):
        super(OneLineListItemAligned, self).__init__(**kwargs)
        self.ids._lbl_primary.halign = halign


class MainApp(MDApp):
    def build(self):
        sv = ScrollView()
        ml = MDList()
        sv.add_widget(ml)
        contacts = ["Paula", "John", "Kate", "Vlad"]
        for c in contacts:
            ml.add_widget(OneLineListItemAligned(halign="center", text=c))
        return sv

if __name__ == '__main__':
    MainApp().run()

P.S。代码中的kv部分未在您的示例中使用...