Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自python文件的Kivy标签对齐器_Python_Kivy_Kivymd - Fatal编程技术网

来自python文件的Kivy标签对齐器

来自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

我正试图将文本标签左列左对齐到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 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

约翰!一切都很清楚,工作起来很有魅力;)