<h2>问题</h2>
<blockquote>
<p>get the text starting in the upper left corner of the label</p>
</blockquote>
<h2>解决方案-左上角的文本</h2>
<p>在构造函数中添加以下内容,<code>__init__()</code>方法。你知道吗</p>
<pre><code>def __init__(self, string, **kwargs):
super(TestScreen, self).__init__(**kwargs)
self.bind(size=self.setter('text_size'))
self.halign = 'left'
self.valign = 'top'
</code></pre>
<p><a href="https://kivy.org/docs/api-kivy.uix.label.html#text-alignment-and-wrapping" rel="nofollow noreferrer">Text alignment and wrapping</a></p>
<blockquote>
<p>The <a href="https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label" rel="nofollow noreferrer">Label</a> has <a href="https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.halign" rel="nofollow noreferrer">halign</a> and <a href="https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.valign" rel="nofollow noreferrer">valign</a> properties to control the alignment of
its text. However, by default the text image (<a href="https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.texture" rel="nofollow noreferrer">texture</a>) is only just
large enough to contain the characters and is positioned in the center
of the Label. The valign property will have no effect and halign will
only have an effect if your text has newlines; a single line of text
will appear to be centered even though halign is set to left (by
default).</p>
<p>In order for the alignment properties to take effect, set the
<a href="https://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.text_size" rel="nofollow noreferrer">text_size</a>, which specifies the size of the bounding box within which
text is aligned. For instance, the following code binds this size to
the size of the Label, so text will be aligned within the widget
bounds. This will also automatically wrap the text of the Label to
remain within this area.</p>
<pre><code>Label:
text_size: self.size
halign: 'right'
valign: 'middle'
</code></pre>
</blockquote>
<h2>输出-左上角的文本</h2>
<p><a href="https://i.stack.imgur.com/UoFSn.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/UoFSn.png" alt="Img01 - text in top-left corner"/></a>
<a href="https://i.stack.imgur.com/ZCn1m.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZCn1m.png" alt="Img02 - text in top-left corner"/></a></p>
<h2>解决方案-文本居中</h2>
<p>用<code>Clock.create_trigger()</code>来模拟打字机。你知道吗</p>
<p><a href="https://kivy.org/docs/api-kivy.clock.html#triggered-events" rel="nofollow noreferrer">Triggered Events</a></p>
<blockquote>
<p>A triggered event is a way to defer a callback. It functions exactly
like schedule_once() and schedule_interval() except that it doesn’t
immediately schedule the callback. Instead, one schedules the callback
using the <a href="https://kivy.org/docs/api-kivy.clock.html#kivy.clock.ClockEvent" rel="nofollow noreferrer">ClockEvent</a> returned by it. This ensures that you can
call the event multiple times but it won’t be scheduled more than
once. This is not the case with Clock.schedule_once()</p>
</blockquote>
<h2>你知道吗主.py你知道吗</h2>
<pre><code>from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
class TestScreen(Label):
def __init__(self, string, **kwargs):
super(TestScreen, self).__init__(**kwargs)
self.font_size = 26
self.string = string
self.typewriter = Clock.create_trigger(self.typeit, 1)
self.typewriter()
def typeit(self, dt):
self.text += self.string[0]
self.string = self.string[1:]
if len(self.string) > 0:
self.typewriter()
class TestApp(App):
title = "Kivy Typewriter"
def build(self):
return TestScreen("That is my Kivy Typewriter demo")
if __name__ == "__main__":
TestApp().run()
</code></pre>
<h2>输出-文本居中</h2>
<p><a href="https://i.stack.imgur.com/AkHOS.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/AkHOS.png" alt="Img01 - text in center"/></a>
<a href="https://i.stack.imgur.com/1hbBi.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1hbBi.png" alt="Img02 - text in center"/></a></p>