2016-11-07 27 views
1

ifブロックをon_pressイベントに入れる必要がありますが、私のコンパイラはこのコードを実行しません。それは私があまりにも多くのインデントレベルを持っていたと言います。私は何かが欠けている?私は正しいのですか?これはどのように作動しますか?それがバグだとすれば、どうすればそれを避けることができますか?このエラーは、1.9.1と1.9.0 Kivyの両方で表示されます。on_press(ボタン)のインデントレベルが多すぎます

main.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() 

KV出力

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の後に1つのアクションを使用してください。

答えて

2

これは実装されていないためです。少なくともあなたはそれがうまくいくと思います。また、ロジックを直接Pythonに移す必要があることも示しています。コードのブロックが多すぎると、このようなものは主にkvのファイルが混乱することになります。それは将来のコードのための良い方法のように思えます。それ以外の場合はkvファイルしか必要とせず、コーディング中に.pyファイルに行うプロファイリング、印刷などの変態的な方法には最適ではありません。

.kvファイルは主にレイアウト設計用に使用され、少しのロジックがPythonで書くのは面倒です。部分集合、引数(un)のパッキングなどを持つメソッド。私はまだ言語が少し仕事が必要だと思うし、これはバグと見なすことができますが(言語がそのようなブロックをサポートしている場合)、ブロック全体がなくてもかなりうまく作業できます。if-else

など。このように:

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

古き良き;は救助に来て、あなたが望むどのように多くの行が置くのは自由です。

関連する問題