<tfoot id='BUgpk'></tfoot>

  • <legend id='BUgpk'><style id='BUgpk'><dir id='BUgpk'><q id='BUgpk'></q></dir></style></legend>

        • <bdo id='BUgpk'></bdo><ul id='BUgpk'></ul>

      1. <i id='BUgpk'><tr id='BUgpk'><dt id='BUgpk'><q id='BUgpk'><span id='BUgpk'><b id='BUgpk'><form id='BUgpk'><ins id='BUgpk'></ins><ul id='BUgpk'></ul><sub id='BUgpk'></sub></form><legend id='BUgpk'></legend><bdo id='BUgpk'><pre id='BUgpk'><center id='BUgpk'></center></pre></bdo></b><th id='BUgpk'></th></span></q></dt></tr></i><div id='BUgpk'><tfoot id='BUgpk'></tfoot><dl id='BUgpk'><fieldset id='BUgpk'></fieldset></dl></div>

        <small id='BUgpk'></small><noframes id='BUgpk'>

      2. 基于窗口高度和宽度的 Kivy 缩放文本

        时间:2023-06-07
            <tbody id='GMkB9'></tbody>

            <i id='GMkB9'><tr id='GMkB9'><dt id='GMkB9'><q id='GMkB9'><span id='GMkB9'><b id='GMkB9'><form id='GMkB9'><ins id='GMkB9'></ins><ul id='GMkB9'></ul><sub id='GMkB9'></sub></form><legend id='GMkB9'></legend><bdo id='GMkB9'><pre id='GMkB9'><center id='GMkB9'></center></pre></bdo></b><th id='GMkB9'></th></span></q></dt></tr></i><div id='GMkB9'><tfoot id='GMkB9'></tfoot><dl id='GMkB9'><fieldset id='GMkB9'></fieldset></dl></div>
          1. <legend id='GMkB9'><style id='GMkB9'><dir id='GMkB9'><q id='GMkB9'></q></dir></style></legend>
              <bdo id='GMkB9'></bdo><ul id='GMkB9'></ul>
              • <small id='GMkB9'></small><noframes id='GMkB9'>

                  <tfoot id='GMkB9'></tfoot>

                1. 本文介绍了基于窗口高度和宽度的 Kivy 缩放文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想根据窗口高度缩放按钮或标签内的文本,但受窗口宽度限制.以下作品:

                  I want to scale a text inside a button or label based on the window height, but limited by window width. The following works:

                  font_size: self.height - dp(15)
                  

                  但是文本可以超过按钮或标签的宽度,所以我想用类似的东西来限制它:

                  However the text can exceed the width of the button or label, so I want to limit it with something like:

                  font_size: self.height - dp(15) if self.texture_size[0] < self.width else (self.width*2)/(self.height+0.1)
                  

                  不幸的是,当 >= texture_size[0] 时它会变小,但是当文本再次变小时,它是 <自我宽度.所以它最终陷入了一个循环,从而导致 [CRITICAL] [Clock] 错误.

                  Unfortunately this has to problem that when >= texture_size[0] it will become smaller, but then when the text is smaller again, it is < self.width. So it end up stuck in a loop, which results in [CRITICAL] [Clock] error.

                  为了给出更清晰的画面,红条中的文字应该尽可能大,但不要超过按钮宽度:

                  To give a more clear picture, the text in the red bar should be as big as possible, but not exceed the button width:

                  推荐答案

                  如果文本太大,可以使用缩放变换来缩小文本,这样可以避免竞争:

                  You can use a scale transformation to shrink the text if it is too large, which will avoid the race:

                  <ScaleLabel@Label>:
                      _scale: 1. if self.texture_size[0] < self.width else float(self.width) / self.texture_size[0]
                      canvas.before:
                          PushMatrix
                          Scale:
                              origin: self.center
                              x: self._scale or 1.
                              y: self._scale or 1.
                      canvas.after:
                          PopMatrix
                  

                  不过,这确实会缩放画布上的所有内容.因此,如果您尝试绘制背景或其他内容,请确保它位于 PushMatrix/PopMatrix 之外.例如,如果你想将它与 Button 一起使用,你可以重写 Button 的 kv 规则:

                  This does scale everything on the canvas, however. So if you're trying to draw a background or something, make sure it is outside the PushMatrix/PopMatrix. For example, if you wanted to use this with a Button, you could rewrite Button's kv rules:

                  <-ScaleButton@Button>:
                      state_image: self.background_normal if self.state == 'normal' else self.background_down
                      disabled_image: self.background_disabled_normal if self.state == 'normal' else self.background_disabled_down
                      _scale: 1. if self.texture_size[0] < self.width else float(self.width) / self.texture_size[0]
                      canvas:
                          Color:
                              rgba: self.background_color
                          BorderImage:
                              border: self.border
                              pos: self.pos
                              size: self.size
                              source: self.disabled_image if self.disabled else self.state_image
                          PushMatrix
                          Scale:
                              origin: self.center
                              x: self._scale or 1.
                              y: self._scale or 1.
                          Color:
                              rgba: self.disabled_color if self.disabled else self.color
                          Rectangle:
                              texture: self.texture
                              size: self.texture_size
                              pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)
                          PopMatrix
                  

                  我创建了一个用法示例作为要点:https://gist.github.com/kived/862db38078170ec0ef83

                  I created a usage example as a gist: https://gist.github.com/kived/862db38078170ec0ef83

                  这篇关于基于窗口高度和宽度的 Kivy 缩放文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何隐藏主窗口标题栏并在 kivy 框架中放置透明背景? 下一篇:Kivy Python TextInput 显示气泡

                  相关文章

                  <i id='woiWE'><tr id='woiWE'><dt id='woiWE'><q id='woiWE'><span id='woiWE'><b id='woiWE'><form id='woiWE'><ins id='woiWE'></ins><ul id='woiWE'></ul><sub id='woiWE'></sub></form><legend id='woiWE'></legend><bdo id='woiWE'><pre id='woiWE'><center id='woiWE'></center></pre></bdo></b><th id='woiWE'></th></span></q></dt></tr></i><div id='woiWE'><tfoot id='woiWE'></tfoot><dl id='woiWE'><fieldset id='woiWE'></fieldset></dl></div>
                2. <small id='woiWE'></small><noframes id='woiWE'>

                  • <bdo id='woiWE'></bdo><ul id='woiWE'></ul>

                      <tfoot id='woiWE'></tfoot>
                      <legend id='woiWE'><style id='woiWE'><dir id='woiWE'><q id='woiWE'></q></dir></style></legend>