Kivy将Python变量导入内联KV

时间:2016-07-18 08:37:31

标签: python variables kivy

我已经在这个特定的墙上撞了好几天了。这里没有相关文章有效,所以我真的需要知道我哪里出错了。相关的代码部分是:

    def print_scb(myscb):
        print(myscb)
        scb_string = ''
        scb_list = [ 'Combat' , 'Communication' , 'Manipulation' , 'Mental' , 'Perception', 'Physical' ]
        for s in scb_list:
            zz = str(myscb[s])
            scb_string = scb_string + s + " " + zz + "% "
        return scb_string

内联KV部分是:

<CharacterSheet>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text:'Stats'
        Label:
            text: app.print_stats()
        Label:
            text:'Rolls'
        Label:
            text: app.print_rolls()
        Label:
            text:'SCM'
        Label:
            text: app.print_scm()
        Label:
            text:'SCB'
        Label:
            text: app.print_scb()
        Button:
            text:'Quit'
            on_press: sys.exit()
        Button:
            text:'Back to Start'
            on_press: root.manager.current = 'welcome'

&#34;&#34;&#34)

程序崩溃:

 kivy.lang.BuilderException: Parser: File "<inline>", line 114:
 ...
     112:            text:'SCB'
     113:        Label:
 >>  114:            text: app.print_scb()
     115:        Button:
     116:            text:'Quit'
  ...
 BuilderException: Parser: File "<inline>", line 114:
 ...
     112:            text:'SCB'
     113:        Label:
 >>  114:            text: app.print_scb()
     115:        Button:
     116:            text:'Quit'
 ...
 AttributeError: 'NoneType' object has no attribute 'bind'
   File "/usr/lib64/python3.4/site-packages/kivy/lang.py", line 1742, in   create_handler
     return eval(value, idmap), bound_list
   File "<string>", line 114, in <module>
   File "/usr/lib64/python3.4/site-packages/kivy/lang.py", line 935, in __getattribute__
 object.__getattribute__(self, '_ensure_app')()
   File "/usr/lib64/python3.4/site-packages/kivy/lang.py", line 930, in _ensure_app
     app.bind(on_stop=lambda instance:

   File "/usr/lib64/python3.4/site-packages/kivy/lang.py", line 2115, in _apply_rule
     rctx['ids'])
   File "/usr/lib64/python3.4/site-packages/kivy/lang.py", line 1747, in create_handler
 cause=tb)

整个代码已发布到BrpGui.py

的dpaste

print_scb()函数返回一个字符串。

我出错的任何想法? 科林

1 个答案:

答案 0 :(得分:0)

正如你在评论中提到的那样。

  

print_scb不是全局函数。它在CharacterSheet(Screen):class。中定义。

当你定义了你自己的功能时。

因此def print_scb(myscb):而不是def print_scb(self, myscb):

同样在您的kv文件中,请勿使用app.print_scb()root.print_scb() 因为它属于那个类。

但是由于你的函数想要一个参数,它会抛出一个错误。所以你需要用参数调用它。像这样root.print_scb(some_variable)

来自文档https://kivy.org/docs/guide/lang.html -

  

Kv语言有三个特定关键字:

     

应用:始终引用您的应用实例    root:指当前规则中的基本小部件/模板
   self:始终引用当前小部件