Выровнять по тексту в сетке :киви

#python #kivy

Вопрос:

я пытаюсь показать часть текста справа и часть текста слева

вот что я попробовал :-

 from kivy.app import App,runTouchApp
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from io import BytesIO
from PIL import ImageOps, ImageDraw
from PIL import Image as img
from kivy.uix.image import Image, AsyncImage
from kivy.core.image import Image as CoreImage, Texture
from kivy.core.window import Window
from kivy.uix.label import Label
class m(App):
    def build(self):
        f=FloatLayout()
        layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
        # Make sure the height is such that there is something to scroll.
        layout.bind(minimum_height=layout.setter('height'))
        list=[('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo'),(' ','hgghughuffooeoeo'),(' ','hgghughuffooeoeo'),('hhhhbjjggjgjgiinvhhgenshh',' '),(' ','hgghughufnfooeoeo'),('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo'),('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo'),('hhhhbjjnggjgjgii',' '),(' ','hgghughufnsjsjfooeoeo'),('hhhhbjjgnggnfggnggngjgjgii',' '),(' ','hgghughuffooeoeo'),('hhhhbjjggjgjgii',' '),(' ','ab'),('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo')]
        for ifu in list:
            g=GridLayout(cols=2,rows=1,size_hint_y=None,spacing=200)
            if ifu[1]=='ab':
                l=Label(text=' ')
                g.add_widget(l)
                t=Button(background_normal='person-light.png',background_down='person-light.png',size_hint=(1,1))
                g.add_widget(t)
            else:
                if ifu[0]==' ':
                    l=Label(text=' ')
                    g.add_widget(l)
                    ime=Button(text='[color=ffffff]' ifu[1] '[/color]',markup=True,size_hint_y=None)
                    g.add_widget(ime)
                else:
                    ime=Button(text='[color=ffffff]' ifu[0] '[/color]',markup=True,size_hint_y=None)
                    g.add_widget(ime)
                    l=Label(text=' ')
                    g.add_widget(l)
            layout.add_widget(g)
        root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height-100))
        root.add_widget(layout)
        f.add_widget(root)
        return f
m().run()
 

но это не регулировка ширины и высоты в соответствии с текстом, я хочу, чтобы, если текст небольшой, ширина и высота кнопки также невелики, и если возможно, сделайте эту кнопку закругленной в углу
, пожалуйста, помогите мне в этом

Ответ №1:

Вы можете настроить размер Button (или Label ), используя его texture_size . Вы можете использовать:

 size_hint: None, None
size: self.texture_size
 

для Button операционной Label , но это делает Button ее достаточно большой, чтобы вместить text . Вы можете добавить несколько пикселей, чтобы обеспечить небольшое пространство вокруг текста, как это показано в kv :

 <MyButt>:
    size_hint: None, None
    height: self.texture_size[1]   10
    width: self.texture_size[0]   10
 

Затем в коде python:

 class MyButt(Button):
    pass
 

Поэтому просто загрузите kv строку выше и замените использование Button на MyButt .

Вы можете получить округлые кнопки, используя что-то вроде MDFillRoundFlatButton in KivyMD .

Комментарии:

1. но если кнопка больше, чем сетка, ее наложение на кнопки, я хочу, чтобы размер g(сетка) был таким же, как размер кнопки

2. Не уверен, что понимаю. Не могли бы вы показать пример наложения?

3. @я получил это от поддержки kivy, но большое спасибо

Ответ №2:

от @John Anderson и для регулировки высоты сетки, отличной от высоты кнопки, я использовал height: self.minimum_height, чтобы избежать перекрытия для больших кнопок