【问题标题】:Align according to text in GridLayout :kivy根据 GridLayout 中的文本对齐:kivy
【发布时间】:2021-05-24 11:42:59
【问题描述】:

我试图在右侧显示一些文本,在左侧显示一些文本

这是我尝试过的:-

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()

但它不会根据文本调整宽度和高度,如果文本很小,那么按钮的宽度和高度也很小,并且如果可以使该按钮在角落处变圆,我希望它 请帮我解决这个问题

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您可以使用texture_size 调整Button(或Label)的大小。您可以使用:

    size_hint: None, None
    size: self.texture_size
    

    对于ButtonLabel,但这会使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

    您可以在KivyMD 中使用MDFillRoundFlatButton 之类的东西来获得圆形按钮。

    【讨论】:

    • 但是如果按钮大于 gridlayout 它覆盖在其他按钮上,我想让 g(gridlayout) 大小与按钮大小相同
    • 不确定我是否理解。你能举一个覆盖的例子吗?
    • @我得到了 kivy 的支持,但非常感谢
    【解决方案2】:

    @John Anderson 并调整 GridLayout 的高度,我使用 height: self.minimum_height 以避免大按钮重叠

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2018-02-05
      • 2013-02-26
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多