来自python文件的Kivy标签对齐器
我正试图将文本标签左列左对齐到Kivy GridLayout中, 为此,我尝试将Label小部件放入一个BoxLayout中,并在其上设置一个静态宽度,但发生了一个奇怪的行为,标签文本似乎随着较长的文本向左移动(离开窗口),示例如下: main.py来自python文件的Kivy标签对齐器,python,kivy,kivymd,Python,Kivy,Kivymd,我正试图将文本标签左列左对齐到Kivy GridLayout中, 为此,我尝试将Label小部件放入一个BoxLayout中,并在其上设置一个静态宽度,但发生了一个奇怪的行为,标签文本似乎随着较长的文本向左移动(离开窗口),示例如下: main.py from kivy.lang import Builder from kivymd.app import MDApp from kivy.uix.label import Label from kivy.uix.boxlayout import B
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class MyApp(MDApp):
def build(self):
self.theme_cls.primary_palette = "Blue"
self.theme_cls.primary_hue = "A700"
self.theme_cls.theme_style = "Light"
screen = Builder.load_file('main.kv')
return screen
def on_start(self):
self.update_data()
def update_data(self, *args):
events = [['soccer', '01/01/2020', '15:00', 'Borussia Dortmund', 'Borussia Monchengladbach', '1', 'William Hill', '2.55', 'Stanleybet' ,'3.40'],['soccer', '01/01/2020', '15:00', 'Roma', 'Lazio', '1', 'William Hill', '2.55', 'Stanleybet' ,'3.40'],['soccer', '01/01/2020', '15:00', 'Barcellona', 'Atletico De Madrid', '1', 'William Hill', '2.55', 'Stanleybet' ,'3.40']]
for event in events:
event_sport = str(event[0])
event_date = str(event[1])
event_time = str(event[2])
home_contender = str(event[3])
away_contender = str(event[4])
event_sign = str(event[5])
event_portal = str(event[6])
event_portal_odds = event[7]
event_portal2 = str(event[8])
event_portal2_odds = str(event[9])
event_data_content = BoxLayout(size_hint_x=None, width=180)
event_data = Label(text=f'[color=#000000][size=14][b]{event_sport.upper()}[/b][/size]\n'
f'[size=13]{event_date} {event_time}[/size]\n'
f'{home_contender}\n'
f'{away_contender}[/color]',
size_hint_x=None,
width=150,
halign='left',
valign='top',
markup=True)
event_data_content.add_widget(event_data)
event_sign = Label(text=f'[color=000000][size=20]{event_sign}[/size][/color]',
halign='center',
valign='top',
markup=True)
event_p = Label(text=f'[color=000000][i]{event_portal}[/i]\n'
f'[size=13][b]{event_portal_odds}[/b][/color]',
halign="center",
valign="top",
markup=True)
event_p2 = Label(text=f'[color=000000][i]{event_portal2}[/i]\n'
f'[size=13][b]{event_portal2_odds}[/b][/color]',
halign="center",
valign="top",
markup=True)
self.root.ids.content.add_widget(event_data_content)
self.root.ids.content.add_widget(event_sign)
self.root.ids.content.add_widget(event_p)
self.root.ids.content.add_widget(event_p2)
MyApp().run()
主电压(千伏)
Screen:
BoxLayout:
orientation: 'vertical'
ScrollView:
do_scroll_x: False
do_scroll_y: True
MDGridLayout:
id: content
cols:4
size_hint_y: None
height: self.minimum_height
row_default_height: '90dp'
row_force_default: True
结果如下:
有什么建议吗
提前感谢为了使您的
halign
正常工作,您必须设置文本大小
(请参阅)
此外,您的宽度为150
,这会导致较长文本的包装。这不是一个错误,只是决定是否要换行
尝试对代码进行以下更改:
event_data = EventLabel(text=f'[color=#000000][size=14][b]{event_sport.upper()}[/b][/size]\n'
f'[size=13]{event_date} {event_time}[/size]\n'
f'{home_contender}\n'
f'{away_contender}[/color]')
为事件数据创建自定义标签:
class EventLabel(Label):
pass
为新的事件标签添加kv
规则:
<EventLabel>:
size_hint_x: None
width: 200 # the previous width of 150 caused text wrapping
text_size: self.size # this is needed to allow halign/valign to operate
halign: 'left'
valign: 'top'
markup: True
约翰!一切都很清楚,工作起来很有魅力;)