带有Kivy语言和自定义widg的Kivy滚动视图

2024-10-01 15:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个Python库Kivy,我在使用滚动视图并将其组织成一个.kv文件时遇到了困难。在

我有一个大系统,它被分成许多.py和.kv文件。在

我也在用kivy的屏幕管理器

用户界面_经理.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.

在主.py在

^{pr2}$

显然,我修改了一些代码,但这几乎就是所发生的事情。在

其中一个scren需要滚动。它将有一个长的图形和许多按钮。 像往常一样,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"

我知道这有很多,而且看起来还不是很有条理,但我只是想弄清楚如何让当当的事情正常运作。在

现在的结果是:它不会滚动,不管出于什么原因,它被“装箱”到右边,而不是占据整个屏幕 enter image description here


Tags: 文件pyposselfnone视图size屏幕
2条回答

正如ML上所回答的,这里您没有定义标签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

看起来这个特殊的“滑动”屏幕的诀窍是使用“相对布局” https://groups.google.com/forum/#!topic/kivy-users/RwuI8QGm3fw

以下是更新后的代码: 橙色_小工具.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

在橙色边缘.kv在

^{pr2}$

相关问题 更多 >

    热门问题