首页 > 解决方案 > 根据 GridLayout 中的文本对齐: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'),('hhhhbjjggjgjgii\nvhhge\nshh',' '),(' ','hgghughuf\nfooeoeo'),('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo'),('hhhhbjjggjgjgii',' '),(' ','hgghughuffooeoeo'),('hhhhbjj\nggjgjgii',' '),(' ','hgghughuf\nsjsjfooeoeo'),('hhhhbjjg\ngg\nfgg\ngg\ngjgjgii',' '),(' ','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()

但它不是根据文本调整宽度和高度,如果文本很小,那么我希望它是这样的

标签: pythonkivy

解决方案


您可以通过使用它来调整 a Button(或)的大小。您可以使用:Labeltexture_size

size_hint: None, None
size: self.texture_size

对于 aButtonLabel,但这会使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上面的字符串并将使用替换ButtonMyButt

MDFillRoundFlatButton您可以使用类似in的东西来获得圆形按钮KivyMD


推荐阅读