【问题标题】:Too many indentation levels in on_press (Button)on_press(按钮)中的缩进级别太多
【发布时间】:2016-11-07 17:25:12
【问题描述】:

我需要将if 块放入on_press 事件中,但我的编译器不会放过这段代码。它说我有太多的缩进级别。我错过了什么?我做得对吗?这是如何运作的?如果它是一个错误,我该如何避免它?我在 1.9.1 和 1.9.0 Kivy 上都会出现此错误。

ma​​in.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button

Builder.load_string('''
#:set some_data 'text'
#:set Condition True

<MyClass>:
    text: 'Some text'
    on_press: 
        if Condition: 
            root.doSomething()
            root.DoSomething(some_data)
''')

class MyClass(Button):
    def DoSomething(*args):
        pass #not actually doing anything

class MyApp(App):

    def build(self):
        return MyClass()

if __name__ == '__main__':
    MyApp().run()

千伏输出

 Traceback (most recent call last):
 File "file.py", line 15, in <module>
 ''')
 File "C:\Python27\lib\site-packages\kivy\lang.py", line 1889, in load_string
 parser = Parser(content=string, filename=fn)
 File "C:\Python27\lib\site-packages\kivy\lang.py", line 1264, in __init__
 self.parse(content)
 File "C:\Python27\lib\site-packages\kivy\lang.py", line 1366, in parse
 objects, remaining_lines = self.parse_level(0, lines)
 File "C:\Python27\lib\site-packages\kivy\lang.py", line 1540, in parse_level
 'Invalid indentation (too many levels)')
 kivy.lang.ParserException: Parser: File "<inline>", line 8:
 ...
       7:       on_press:
       8:               if Condition:
 >>    9:                       root.doSomething()
      10:                       root.DoSomething(some_data)
 ...
 Invalid indentation (too many levels)

如果我将 if 放在同一行,这将有效:

on_press: if Condition: DoSomething()

但我这样只能在if之后使用一个动作。

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    那是因为它没有实现。至少不是你认为它会起作用的方式。它还表明您应该将逻辑直接移至 Python。太多的代码块,主要是kv 文件中这样的东西会变得一团糟。这似乎是未来代码的好方法,否则您只需要 kv 文件,这对于您在编码时对 .py 文件执行的分析、打印和其他古怪方法来说不是最佳的。

    .kv 文件主要用于布局设计和一些在 python 中编写会很烦人的逻辑,例如带有部分,带有参数(取消)打包的方法等等。我认为该语言仍然需要一些工作,这可能被认为是一个错误(如果该语言支持此类块),但即使没有整个 if-else 块,您也可以很好地使用它。

    例如像这样:

    Button:
        text: 'a'
        on_press:
            if self.text == 'a': print 'It is A!'; print 'Sure it is!'
            else: print 'No.'
    

    好老的; 来拯救你,你可以随意放多少行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2016-01-05
      相关资源
      最近更新 更多