我正在努力将 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()
请帮忙!
一种方法是继承
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()
附言您的示例中未使用代码的
kv
部分...
https://github.com/HeaTTheatR/KivyMD/blob/master/kivymd/uix/list.py
OneListItem 继承自BaseListItem,它有一个受保护的属性_txt_left_pad。这是一个受保护的变量,不应被弄乱,因为材料设计标准不允许列表项中的居中文本。但它是蟒蛇,所以没有什么能阻止你弄乱它并增加左边的填充直到它居中或移动到你喜欢的程度。可能还有其他方法也可以通过弄乱 OneListItem 的孩子并改变孩子的繁荣来做到这一点。
通过像这样添加列表项,您可以获得足够的空间,使文本正好位于中心
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:
text = "my text"
ml.add_widget(OneLineListItem(text=f"{' ' * (ml.width - (len(text) * 2))}{text}"))
return sv
if __name__ == '__main__':
MainApp().run()