<bdo id='JtX0o'></bdo><ul id='JtX0o'></ul>
<tfoot id='JtX0o'></tfoot>

  • <legend id='JtX0o'><style id='JtX0o'><dir id='JtX0o'><q id='JtX0o'></q></dir></style></legend>
  • <small id='JtX0o'></small><noframes id='JtX0o'>

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

        在 python 端动态调整 kivy 标签(和按钮)的大小

        时间:2023-10-09
        <tfoot id='GbGt8'></tfoot>
        <i id='GbGt8'><tr id='GbGt8'><dt id='GbGt8'><q id='GbGt8'><span id='GbGt8'><b id='GbGt8'><form id='GbGt8'><ins id='GbGt8'></ins><ul id='GbGt8'></ul><sub id='GbGt8'></sub></form><legend id='GbGt8'></legend><bdo id='GbGt8'><pre id='GbGt8'><center id='GbGt8'></center></pre></bdo></b><th id='GbGt8'></th></span></q></dt></tr></i><div id='GbGt8'><tfoot id='GbGt8'></tfoot><dl id='GbGt8'><fieldset id='GbGt8'></fieldset></dl></div>

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

            <tbody id='GbGt8'></tbody>

          • <bdo id='GbGt8'></bdo><ul id='GbGt8'></ul>
            <legend id='GbGt8'><style id='GbGt8'><dir id='GbGt8'><q id='GbGt8'></q></dir></style></legend>

                • 本文介绍了在 python 端动态调整 kivy 标签(和按钮)的大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  如何在运行时根据文本量动态调整标签或按钮的大小,尤其是 text_size 和 height?

                  How do I dynamically resize the a label or button, in particular, the text_size and height, depending on the amount of text, at run-time?

                  我知道这个问题已经以一种方式回答了这个问题:

                  I am aware that this question has already been answered in one way with this question:

                  动态调整滚动视图中标签的大小?

                  我在部分代码中反映了该示例.

                  And I reflect that example in part of my code.

                  问题是在运行时动态调整标签和按钮的大小.使用,例如:

                  The problem is dynamically resizing the labels and buttons at run-time. Using, for example:

                  btn = Button(text_size=(self.width, self.height), text='blah blah')
                  

                  ...等等,只会让程序认为(并且在逻辑上如此)self"指的是包含按钮的类.

                  ...and so on, only makes the program think (and logically so) that the "self" is referring to the class which is containing the button.

                  那么,我如何在python语言中动态调整这些属性的大小,而不是kivy?

                  So, how do I dynamically resize these attributes in the python language, not kivy?

                  我的示例代码:

                  import kivy
                  kivy.require('1.7.2') # replace with your current kivy version !
                  
                  from kivy.app import App
                  from kivy.uix.screenmanager import ScreenManager, Screen
                  from kivy.properties import ObjectProperty
                  from kivy.uix.button import Button
                  from kivy.uix.gridlayout import GridLayout
                  
                  i = range(20)
                  
                  long_text = 'sometimes the search result could be rather long 
                  sometimes the search result could be rather long 
                  sometimes the search result could be rather long '
                  
                  class ButtonILike(Button):
                  
                      def get_text(self):
                          return long_text
                  
                  class HomeScreen(Screen):
                      scroll_view = ObjectProperty(None)
                  
                      def __init__(self, *args, **kwargs):
                          super(HomeScreen, self).__init__(*args, **kwargs)
                          layout1 = GridLayout(cols=1, spacing=0, size_hint=(1, None), 
                              row_force_default=False, row_default_height=40)
                          layout1.bind(minimum_height=layout1.setter('height'),
                                       minimum_width=layout1.setter('width'))
                          layout1.add_widget(ButtonILike())
                  
                          for result in i:
                  
                                  btn1 = Button(font_name="data/fonts/DejaVuSans.ttf", 
                                      size_hint=(1, None), valign='middle',)#, 
                                      #height=self.texture_size[1], text_size=(self.width-10, None))
                                  btn1.height = btn1.texture_size[1]
                                  btn1.text_size = (btn1.width-20, layout1.row_default_height)
                                  btn1.text = long_text
                  
                                  btn2 = Button(font_name="data/fonts/DejaVuSans.ttf", 
                                      size_hint=(1, None), valign='middle')
                  
                                  btn2.bind(text_size=(btn2.width-20, None))
                                  btn2.text = 'or short'
                  
                                  layout1.add_widget(btn1)
                                  layout1.add_widget(btn2)
                  
                  
                          scrollview1 = self.scroll_view
                          scrollview1.clear_widgets()
                          scrollview1.add_widget(layout1)
                  
                  
                  class mybuttonsApp(App):
                  
                      def build(self):
                  
                          return HomeScreen()
                  
                  
                  
                  if __name__ == '__main__':
                      mybuttonsApp().run()
                  

                  还有kv文件:

                  #:kivy 1.7.2
                  
                  <ButtonILike>:
                      text_size: self.width-10, None
                      size_hint: (1, None)
                      height: self.texture_size[1]
                      text: root.get_text()
                      #on_release: root.RunSearchButton_pressed()
                  
                  <HomeScreen>:
                      scroll_view: scrollviewID
                      AnchorLayout:
                          size_hint: 1, .1   
                          pos_hint: {'x': 0, 'y': .9}
                          anchor_x: 'center'
                          anchor_y: 'center'
                          Label:
                              text: 'Button Tester'
                  
                      ScrollView:
                          id: scrollviewID
                          orientation: 'vertical'
                          pos_hint: {'x': 0, 'y': 0}
                          size_hint: 1, .9
                          bar_width: '8dp'
                  

                  您可以看到我从 kv 文件中添加了按钮,该按钮在列表顶部显示了我想要的所有行为.在运行时调整窗口大小,您可以看到它的神奇之处.当然,更改 text_size 也可以让我对齐文本.

                  You can see that I added the button from the kv file which displays all the behavior that I want at the top of the list. Resize your window while running it, and you can see the magic. And, of course, changing the text_size also makes it possible for me to align text.

                  我根本无法在 python 端实现相同的行为.我的应用程序要求在运行时创建按钮.我认为答案可能在于bind()",尽管不可否认,我不确定我在尝试中是否正确使用了它,或者我是否完全理解它.您可以看到我尝试使用btn2",我认为它会将文本扔到左侧(因为 halign 默认为左侧),但似乎没有做任何事情.

                  I simply have not been able to achieve the same behavior on the python side. My app requires that the buttons be created at run-time. I think the answer might lie with "bind()", though admittedly, I'm not sure I used it correctly in my attempts or that I understand it fully. You can see that I tried with "btn2", which I thought would've thrown the text to the left (since halign defaults to left), but didn't seem to do anything.

                  感谢您的帮助.

                  推荐答案

                  我觉得最好的办法是把Label's/Button's size设置为texture_size:

                  I think the best way is to set Label's/Button's size to texture_size:

                  Label:
                      text: "test"
                      size_hint: None, None
                      size: self.texture_size
                  
                      canvas.before: # for testing purposes
                          Color:
                              rgb: 0, 1, 0
                          Rectangle:
                              pos: self.pos
                              size: self.size
                  

                  这篇关于在 python 端动态调整 kivy 标签(和按钮)的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Kivy 刷新布局(异步加载) 下一篇:如何在 Kivy 文本输入中水平居中文本?

                  相关文章

                  最新文章

                • <small id='CHlml'></small><noframes id='CHlml'>

                  <legend id='CHlml'><style id='CHlml'><dir id='CHlml'><q id='CHlml'></q></dir></style></legend>
                  1. <tfoot id='CHlml'></tfoot>

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

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