Неподвижный текст при изменении размеров в kivy python

Рейтинг: 0Ответов: 1Опубликовано: 27.01.2023

Как сделать так, чтоб при изменении размеров окна текст кнопки не смещался вправо-влево и укорачивался согласно размерам кнопки.

кусок кода с виджетами:

def __init__(self, **kwargs):
    super().__init__(**kwargs)

    self.filename = ''
    self.fileslist = str('...')
    self.statusbar = 'status'

    # main layout contains top and down parts of screen
    bl = BoxLayout(orientation='vertical',
                   size_hint=[1, 1]
                    )
    # нижняя часть экрана с кнопками сканировать, открыть файл и строкой статуса
    bl_down_master = BoxLayout(orientation='horizontal'
                               )
    # left in down part with buttons, status bar, help info, list of GC files after scandir
    bl_dm_files_master = BoxLayout(orientation='vertical',
                                   size_hint=[.5, 1]
                                   )

    gl_dm_file_scan = GridLayout(cols=2,
                                 rows=2,
                                 size_hint=[1, 1/3],
                                 size_hint_max_y=105,
                                 padding=2,
                                 spacing=2,
                                 cols_minimum={0: 100, 1: 100},
                                 rows_minimum={0: 25, 1: 25}
                                 )

    self.btn_scan = Button(text='Сканировать',
                           markup = True,
                           size_hint=[1/3, 1],
                           size=[100, gl_dm_file_scan.height/2],
                           size_hint_max=(150, 50),
                           background_color=[.86, .82, .78, 1],
                           background_normal='',
                           color=[0, 0, 0, 1],
                           on_press=self.readfile
                           )
    
    self.btn_load = Button(text='Открыть файл',
                           markup=True,
                           size_hint=[1/3, 1],
                           size_hint_max=(150, 50),
                           background_color=[.86, .82, .78, 1],
                           background_normal='',
                           color=[0, 0, 0, 1],
                           on_press=self.screen_open_file
                           )
    **# та самая кнопка со смещающимся текстом**
    self.status_bar = Button(text='status',
                             font_size=16,
                             size=(100, 50),
                             color=[0, 0, 0, 1],
                             halign='left',
                             valign='center',
                             background_color=(.82, .88, .84, 1),
                             background_normal='',
                             background_down=''
                             )
    self.status_bar.texture_size = [300, self.btn_scan.height]

    # структура виджетов
    bl.add_widget(self.graph)
    bl.add_widget(bl_down_master)

    bl_down_master.add_widget(bl_dm_files_master)
    bl_down_master.add_widget(self.out_params)

    bl_dm_files_master.add_widget(gl_dm_file_scan)
    bl_dm_files_master.add_widget(self.bl_file_list)

    gl_dm_file_scan.add_widget(self.btn_scan)
    gl_dm_file_scan.add_widget(self.status_bar)
    gl_dm_file_scan.add_widget(self.btn_load)
    gl_dm_file_scan.add_widget(bl_btn_help)

    bl_btn_help.add_widget(Widget())
    bl_btn_help.add_widget(btn_help)

    self.bl_file_list.add_widget(lbl)
    self.bl_file_list.add_widget(self.scroll)

    self.add_widget(bl)

Размер открывшегося окна:

Размер открывшегося окна

размер окна изменен, текст наползает на кнопку:

размер окна изменен, текст наползает на кнопку

Ответы

▲ 0

Удалось решить проблему только с использованием доп функции

Window.bind(on_resize=self.resize)

self.status_bar = Button(text='status',
                         padding=(5, 0),
                         font_size=16,
                         text_size=(Window.width/2-155, 20),
                         color=[0, 0, 0, 1],
                         valign='top',
                         halign='center',
                         background_color=(.82, .88, .84, 1),
                         background_normal='',
                         background_down=''
                         )

def resize(self, instance,  width, height):
    self.status_bar.text_size = (Window.width/2-155, 20)