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

    1. <tfoot id='tMRst'></tfoot>

      <legend id='tMRst'><style id='tMRst'><dir id='tMRst'><q id='tMRst'></q></dir></style></legend>

        Kivy - 将标签文本绑定到变量(仅限 Python)

        时间:2023-10-10
          1. <legend id='iUsD2'><style id='iUsD2'><dir id='iUsD2'><q id='iUsD2'></q></dir></style></legend>
              <tbody id='iUsD2'></tbody>

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

                  <bdo id='iUsD2'></bdo><ul id='iUsD2'></ul>
                • <small id='iUsD2'></small><noframes id='iUsD2'>

                  本文介绍了Kivy - 将标签文本绑定到变量(仅限 Python)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我已经尝试让我的标签自动更新很长一段时间了,我已经阅读了十几个 StackOverflow 问题,但无济于事.

                  I have been trying to get my labels to auto-update themselves for quite a while now and I have read over a dozen StackOverflow questions but to no avail.

                  我有一个全局对象,其中包含一个整数值,我希望在其中一个小部件类中显示该值并带有标签.

                  I have an global object that contains an integer value that I want to be displayed with a label inside of one of my widget classes.

                  小部件类如下所示:

                  class Battle(Widget):
                  
                      def __init__(self, **kwargs):
                          super(Battle, self).__init__(**kwargs)
                  
                          #Enemy Stats
                          self.enemyBar = BoxLayout(orientation="horizontal", size=(Window.width, Window.height/8), center_y = Window.height - self.height/2)
                          self.enemyBar.add_widget(Label(text=enemy.name))
                  
                          #Enemy Health Label
                          health_label = Label(text=str(enemy.health))
                          self.enemyBar.add_widget(health_label)
                          self.add_widget(self.enemyBar)
                  
                  
                      def update_health(instance, value):
                          health_label.text = str(enemy.health) #<-- Error happens here
                  
                      enemy.bind(health=update_health)
                  

                  enemy.health 的值在程序中改变时,我希望我的标签也改变.我不想使用任何 kivy 语言,因为我更喜欢只有一个主 python 文件.

                  When the value of enemy.health is changed in the program, I want my label to change as well. I do not want to use any of the kivy language because I prefer having just one main python file.

                  敌人对象是使用实体类创建的.这是实体代码:

                  The enemy object is created with an entity class. Here is the entity code:

                  class entity(Widget):
                      #entity creation
                      health = NumericProperty() 
                  
                      def __init__(self, health):
                          self.health = health
                  

                  当我运行代码时,我按下一个按钮,该按钮调用一个改变敌人生命值的函数,然后我得到一个错误:

                  When I run the code I press a button that calls a function that changes the enemy health and then I get an error:

                  未定义全局名称health_label"

                  不知何故,当调用 update_health 函数时,程序看不到在 init 中创建的 health_label 变量.

                  Somehow, when the update_health function is called, the program doesn't see the health_label variable that was created in the init.

                  推荐答案

                  需要使用bind方法,类似如下

                  You need to use the bind method, something like the following

                  health_label = Label(text=enemy.health)
                  self.enemyBar.add_widget(health_label)
                  def update_health(instance, value):
                      health_label.text = str(enemy.health)
                  enemy.bind(health=update_health)
                  

                  这只是我脑海中的一个基本示例,它可以根据您的程序结构变得更简洁.如果enemy.health 是一个字符串,你可以这样做 enemy.bind(health=health_label.setter('text')).

                  This is just a basic example off the top of my head, it can be made neater depending on the structure of your program. If enemy.health is a string, you can just do enemy.bind(health=health_label.setter('text')).

                  为此,health 属性必须是 kivy 属性:

                  For this to work, the health attribute must be a kivy property:

                  class Enemy(Something):
                      health = StringProperty('')
                  

                  在您的代码中,敌人似乎是一个全局对象.很可能有更好的方法来做到这一点.另外,我建议使用 kv 语言 - 将代码放在一个文件中并没有任何特殊价值(事实上,一旦它变得不平凡,它通常被认为是不好的做法),并且 kv 使很多事情变得更容易,而 python 只是'不适合某些任务.

                  In your code it seems that enemy is a global object. There is quite likely a better way to do that. Also, I recommend using kv language - there is not really any special value in putting your code in one file (indeed, it's commonly considered bad practice once it gets non-trivial), and kv makes a lot of things easier where python just isn't suited to certain tasks.

                  这篇关于Kivy - 将标签文本绑定到变量(仅限 Python)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Kivy:将小部件放在前面 下一篇:在kivy中更改按钮或标签文本颜色

                  相关文章

                  最新文章

                  <tfoot id='hs48T'></tfoot>
                • <legend id='hs48T'><style id='hs48T'><dir id='hs48T'><q id='hs48T'></q></dir></style></legend>
                  • <bdo id='hs48T'></bdo><ul id='hs48T'></ul>
                • <small id='hs48T'></small><noframes id='hs48T'>

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