我使用的是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
#main.py
class MyApp(App):
def build(self):
screenManager = ScreenManager()
uiManager = ui_manager.UIManager(screenManager)
return screenManager
显然我省略了一些代码,但这几乎就是发生的事情。
其中一个screns需要滚动。它将有一个很长的图形和许多按钮。 像往常一样,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"
我知道的很多,并且它看起来不是很好,但我只想弄清楚如何让dang的东西正常工作。
以下是目前的结果:它不会滚动,无论出于什么原因,它都是&#34;盒装&#34;在右边,而不是占据全屏
答案 0 :(得分: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
答案 1 :(得分: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)