Я работаю над GridLayout
(здесь он называется CostosInput
), который добавляет TextInputs
к себе при нажатии кнопки.Однако, когда это происходит, макет не изменяет размеры виджетов вокруг него, что приводит к его перекрытию после добавления определенного количества TextInput
виджетов.Как я могу это исправить?
Это часть другого GridLayout
, который имеет один столбец и содержится в ScrollView
.Виджет под ним (тот, с которым он перекрывается) - Label
.
Я пробовал искать в документах Kivy, но единственное, что я нашел, связано с размером Layouts
и Widgets
, и не обязательно их размещение.Я думал, что это будет что-то вроде layout_hint_with_bounds(sh_sum, available_space, min_bounded_size, sh_min_vals, sh_max_vals, hint)
(ссылка на документы Kivy) , но это внутренняя функция.Я извиняюсь, если что-то не соответствует соглашению.
Вот код для класса CostoInput
.
class CostosInput(GridLayout):
def __init__(self, *args, **kwargs):
super(CostosInput, self).__init__()
self.cols = 2
self.spacing = 5
self.padding = 5
self.size_hint_y = 0.2
# used in add_lines()
self.count = 1
add = Orange_Button(text='AGREGAR COSTO')
add.bind(on_press=self.add_lines)
rem = Orange_Button(text='QUITAR COSTO')
rem.bind(on_press=self.del_lines)
self.add_widget(add)
self.add_widget(rem)
self.add_widget(Orange_Label(text='concepto'))
self.add_widget(Orange_Label(text='costo'))
self.add_lines()
# this function is adds TextInputs
# when the add button is pressed
def add_lines(self, *args, **kwargs):
text = Normal_TI()
text.text = 'costo ' + str(self.count)
text.bind(text=self.change)
flot = FloatInput()
flot.bind(text=self.change)
self.add_widget(text)
self.add_widget(flot)
self.size_hint_y += 0.1
self.count += 1
# this has nothing to do with the ui
def del_lines(self, *args, **kwargs):
for x in range(0, len(self.children) - 4, 2):
if len(self.children) > 4:
try:
if self.children[x].focus or self.children[x + 1].focus:
self.remove_widget(self.children[x])
self.remove_widget(self.children[x])
except Exception as err:
print('del lines: no se pudieron quitar,'
'err {}'.format(err))
# this also has nothing to do with the ui
def change(self, value, *args):
dicto = dict()
for x in range(0, len(self.children) - 4, 2):
dicto[self.children[x + 1].text] = self.children[x].text
print(dicto)
producto.costos = dicto
Вот код для класса, с которым был создан экземпляр метки.Атрибут текста - единственная изменяемая часть.
class Orange_Label(Label):
def __init__(self, *args, **kwargs):
super(Orange_Label, self).__init__(*args, **kwargs)
self.size_hint_y = None
self.size = (self.width, 10)
self.color = (0.95668627451, 0.6941176471, 0.5137254902, 1)