【问题标题】:Python Kivy: Align text to the left side of a LabelPython Kivy:将文本与标签的左侧对齐
【发布时间】:2015-10-16 19:03:47
【问题描述】:

我阅读了文档,但仍然不知道如何将 Kivy-Label 中的文本与其左侧对齐。文本默认居中。 halign = "left" 没有帮助。 抱歉,如果解决方案很明显,但我根本找不到。

编辑: 示例代码:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label

class Example(App):
     def build(self):
          self.root = FloatLayout()
          self.label = Label(text="I'm centered :(", pos=(0,0), size_hint=(1.0,1.0), halign="left")
          self.label.text_size = self.label.size #no horizontal change
          self.root.add_widget(self.label)
          return self.root

Example().run()

【问题讨论】:

    标签: python label kivy text-alignment


    【解决方案1】:

    根据the documentation,新创建的标签的大小似乎与文本长度完全吻合,因此在设置 halign 属性后您可能看不到任何差异。

    建议在此处更改 size 属性(如示例所示)

    text_size = self.size
    

    这会将标签的大小设置为包含它的小部件。 然后您应该会看到标签正确居中。

    正如Tshirtman 所指出的,您还必须将text_size 属性绑定到size。完整的工作示例:

    #!/usr/bin/kivy
    # -*- coding: utf-8 -*-
    
    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.label import Label
    
    class Example(App):
        def build(self):
            self.root = FloatLayout()
            self.label = Label(text="I'm aligned :)", size_hint=(1.0, 1.0), halign="left", valign="middle")
            self.label.bind(size=self.label.setter('text_size'))    
            self.root.add_widget(self.label)
            return self.root
    
    Example().run()
    

    【讨论】:

    • 我已经有了一个尺寸,比标签内的文字宽。
    • 您可能需要发布代码以获得更好的帮助
    • 发布的代码没有显示正在定义的 text_size,这就是答案所建议的。您想将 text_size 绑定到 size。
    • 帮助了 :) 谢谢
    【解决方案2】:

    我有点迟到了,但我发现的另一个不错的技巧是,如果您使用自己的自定义类创建标签,您可以在该类中定义 on_size 函数以将 text_size 更改为 size。

    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    from kivy.uix.label import Label  
              
    class MyLabel(Label):
       def on_size(self, *args):
          self.text_size = self.size
        
    class Example(App):
               def build(self):
                  self.root = FloatLayout()
                  self.label = MyLabel(text="I'm aligned :)", size_hint=(1.0, 1.0), halign="left", valign="middle")
                  self.root.add_widget(self.label)
                  return self.root
        
    Example().run()
    

    on_size 示例:

    没有 on_size 的例子:

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2016-07-11
      • 1970-01-01
      • 2016-01-15
      • 2015-01-25
      • 2016-05-08
      • 2021-04-10
      • 2019-11-10
      • 2015-03-22
      相关资源
      最近更新 更多