2016-07-15 21 views
0

私はPythonとKivyの初心者です。いくつかの進歩を遂げた後、私はレンガの壁にぶつかったし、インターネット検索の量は答えを見つけることができません。Kivy。レイアウトを変更する

私は、GridLayout選択メニューで始まるpython/kivyスクリプトを持っています。次に、「次へ」をクリックし、GridLayoutをBoxLayoutに置き換えて出力を表示します。

import sys 
from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.checkbox import CheckBox 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.pagelayout import PageLayout 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button 
from kivy.properties import StringProperty, ListProperty, DictProperty 
from kivy.uix.widget import Widget 

from brp_stats import * 
from dice_roller import * 
#from display import * 

race = '' 
statblock = '' 

class Test(GridLayout): 

    def printcharacter(self,my_sb,my_cr,my_scm,my_scb): 

     printable_stats = print_stats(my_sb) 
     printable_rolls = print_rolls(my_cr) 
     printable_scm = print_scm(my_scm) 
     printable_scb = print_scb(my_scb) 

     self.clear_widgets() 
     self.add_widget(Label(text_size=(300, None), 
          text='Stats\n' + str(printable_stats))) 
     self.add_widget(Label(text_size=(300, None), 
          text='Rolls\n' + str(printable_rolls))) 
     self.add_widget(Label(text_size=(300, None), 
          text='SCM\n' + str(printable_scm))) 
     self.add_widget(Label(text_size=(300, None), 
          text='SCB\n' + str(printable_scb))) 

     wayout = Button(text='Way Out') 
     self.add_widget(wayout) 
     wayout.bind(on_press=self.canvas.clear) 


# def bar(): 
#  print ("BAR") 

    def human(self,a,b): 
     if b==True: 
      self.Status="human" 
      race=self.Status 
      statblock = human() 
      characteristic_rolls = rolls(statblock) 
      skill_category_modifiers = scm(statblock) 
      skill_category_bonuses = scb(statblock) 
#   TestApp.foo() 
#   Test.bar() 
      Test.printcharacter(\ self,statblock,characteristic_rolls,skill_category_modifiers,skill_category_bonuses) 

class TestApp(App): 

# def foo(): 
#  print ("FOO") 

    def build(self): 
     self.title="BRP Character Generator" 
     return Test() 


#### MAIN CODE #### 

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

そしてKVスクリプトは、私は(この例では、人間の)オプションを選択している何が起こっている

<Test>: 
    cols: 2 
    canvas: 
     Color: 
      rgb: .2,.2,.2 
     Rectangle: 
      pos: self.pos 
      size: self.size 
    Label: 
     text: 'Human' 
    CheckBox: 
     group: 'race_group' 
     on_active: root.human(*args) 
    Button: 
     text: 'Next' 
     on_press: printcharacter() 

です:Pythonスクリプトです。結果を表示する前に[次へ]をクリックするまで待つ必要があります。ただし、Humanを選択するとすぐに、結果はGridLayoutに即座に出力されます。

1)結果を表示する前に[次へ]をクリックするまで選択画面が表示されないのはなぜですか? 2)2番目の画面を表示すると、レイアウトをGridからBoxに切り替えるにはどうすればよいですか?

感謝の言葉をいただきました。

よろしく、 コリン

答えて

0

それは(押す/選択)アクティブなときにあなたのチェックボックスがTest.human(*args)を呼び出し、それはあなたの前に印刷された理由を説明するTest.human()通話Test.printcharacter()の最後の行は、「次へ」ボタンを押してください。

TestクラスはGridLayoutから継承されているため、ルートTestのレイアウトに追加するウィジェットはGridLayoutに追加されます。レイアウトをBoxLayoutに切り替える方法はいくつかありますが、その1つは特定のレイアウトクラスから直接継承しないで、別のレイアウトウィジェットを必要に応じてTestに追加/削除することです。

例えば、TestLabelCheckBox、およびButtonウィジェットの親であるGridLayout子ウィジェットをオフに開始することができます。その後、結果を印刷するためにレイアウトを切り替える場合は、それらのウィジェットをクリアして、BoxLayoutTestに追加することから始めます。 レイアウト= BoxLayout(オリエンテーション= '垂直') デフprint_a_label(自己): レイアウト= BoxLayout(配向ここ

+0

は(簡潔にするために編集された)通常の輸入 'クラスの表示(ウィジェット)の後に、私が試したものです= ')垂直' print_this =ラベル(テキスト= '押されたボタン1') layout.add_widget(print_this) クラスでTestApp(APP): デフ構築(自己): レイアウト=のGridLayout(COLS = 2) button1 =ボタン(テキスト= 'これを押す') layout.add_widget(button1) button1.bind (on_press = Display.print_a_label) return layout'それでも、BoxLayoutは表示されません –

関連する問題