0

PythonライブラリであるKivyを使用していますが、スクロールビューを機能させて、それを.kvファイルに整理するのに問題があります。

私は多くの.pyファイルと.kvファイルに分割された大きなシステムを持っています。

私もkivyのスクリーンマネージャーを使用しています

ui_manager.py

#ui_manager.py
class UIManager():
    _ScreenManager = None

    def __init__(self, inScreenManager):
        self.ScreenManager = inScreenManager # The main app constructs the manager, sends to me, then returns it as the root widget.

main.py

#main.py
class MyApp(App):
    def build(self):
        screenManager = ScreenManager()
        uiManager = ui_manager.UIManager(screenManager)
        return screenManager

明らかに私は少しのコードを省略しました、しかしこれはほとんど正確に起こることです。

画面の1つをスクロールする必要があります。長いグラフィックと多くのボタンがあります。いつものように、Kivyのドキュメントは、kivy言語(.kvファイル)ではなく、コードを介してそれを行う方法を教えてくれます http://kivy.org/docs/api-kivy.uix.scrollview.html

スクロールウィジェットを保持するクラスOrangeWidgetが必要なので、後でそのデータを操作できます。整理されたスクロールビューを機能させるための最善の試みは次のとおりです

orange_widget.py

#orange_widget.py

class OrangeWidget(Screen):
    pass

class OrangeGraphic(Widget):
    pass

Orange.kv

<OrangeLineWidget>
    ScrollView:
        size_hint: (None, None)
        size: (400, 1200)

        OrangeLineGraphic:
            pos: root.pos

<OrangeGraphic>
    canvas:
        Color:
            rgba: 1, .5, 0, 1       
        Rectangle:
            pos: self.center_x - 15, 0
            size: 30, self.height * 2
    Label:
        text: "Hello"

私はそれがたくさんあることを知っています、そしてそれはまだうまく整理されていないように見えます、しかし私はただダングなものを正しく機能させる方法を理解しようとしています。

現在の結果は次のとおりです。スクロールせず、何らかの理由で、全画面表示ではなく、右に「ボックス化」されています。 ここに画像の説明を入力してください

4

2 に答える 2

2

ML で回答されているように、ここでは Label pos を定義しません。OrangeGraphic はレイアウトではなく単純なウィジェットです。それを行う必要があります。

<OrangeGraphic>
    canvas:
        Color:
            rgba: 1, .5, 0, 1       
        Rectangle:
            pos: self.center_x - 15, 0
            size: 30, self.height * 2
   Label:
        text: "Hello"
        pos: root.pos
        size: root.size
于 2013-03-06T13:19:01.037 に答える
0

この特定の「スライド」画面のトリックは、「相対レイアウト」 https://groups.google.com/forum/#!topic/kivy-users/RwuI8QGm3fwを使用することだったようです

更新されたコードは次のとおりです: orange_widget.py

class OrangeWidget(Screen):

    def __init__(self, **kwargs):
        super(OrangeWidget, self).__init__(**kwargs)

        scrollView = ScrollView(size_hint=(1, 1))

        # add custom widget into that layout
        customWidget = OrangeGraphicWidget(height=1200, size_hint_y=None)
        #layout.bind(minimum_height=layout.setter('height'))

        scrollView.add_widget(customWidget)

        self.add_widget(scrollView)

class OrangeGraphicWidget(RelativeLayout):
    pass

OrangeWidget.kv

<OrangeWidget>

<OrangeGraphicWidget>
    canvas:
        Color: 
            rgba: 1, .5, 0, 1           
        Rectangle:
            pos: self.center_x - 15, 20
            size: 30, self.height - (self.height / 10)

    Button:
        text: "Button 1"
        pos: root.pos
        size_hint: (None, None)

    Button:
        text: "Button 2"
        pos_hint: {'center_x': .5, 'center_y': .95}
        size_hint: (None, None)
于 2013-03-06T17:56:09.210 に答える