0

我正在使用 Kivy,一个 Python 库,我无法让滚动视图正常工作,并将其组织到 .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
class MyApp(App):
    def build(self):
        screenManager = ScreenManager()
        uiManager = ui_manager.UIManager(screenManager)
        return screenManager

显然我省略了一些代码,但这几乎就是发生的事情。

其中一个屏幕需要滚动。它将有一个长图形和许多按钮。像往常一样,Kivy 文档只告诉我如何通过代码进行操作,而不是通过 kivy 语言(.kv 文件) http://kivy.org/docs/api-kivy.uix.scrollview.html

我想要一个类 OrangeWidget 来保存滚动小部件,以便我以后可以使用它的数据。这是我让有组织的滚动视图工作的最佳尝试

橙色小部件.py

#orange_widget.py

class OrangeWidget(Screen):
    pass

class OrangeGraphic(Widget):
    pass

橙色.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 回答