我想在我的Kivy应用程序中围绕ScrollView绘制边框。问题是ScrollView的内容重叠了边框,因为我在窗口小部件中绘制它 所以我想知道其中一个是否是一个可能的解决方案:
以下是一些用于演示此问题的测试代码。这是一个稍微修改过的官方例子。滚动时按钮与绿色边框重叠,这是我不想要的:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
Builder.load_string('''
<ScrollView>:
canvas:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
Color:
rgba: 0, 1, 0, 1
Line:
points: self.x, self.y + self.height,\
self.x + self.width, self.y + self.height,\
self.x + self.width, self.y, self.x, self.y,\
self.x, self.y + self.height
width: 1.2
''')
class TestApp(App):
def build(self):
layout = GridLayout(cols=1, padding=10, spacing=10,
size_hint=(None, None), width=500)
layout.bind(minimum_height=layout.setter('height'))
for i in range(30):
btn = Button(text=str(i), size=(480, 40),
size_hint=(None, None))
layout.add_widget(btn)
root = ScrollView(size_hint=(None, None), size=(500, 320),
pos_hint={'center_x': .5, 'center_y': .5}, do_scroll_x=False)
root.add_widget(layout)
return root
TestApp().run()
答案 0 :(得分:1)
如何在小部件的边界外绘制? 当我试图将一个画布元素的一部分移动到小部件之外时,它只是切断了那个部分,这并不奇怪。也许我可以在这个之外制作另一个小部件并借鉴它?
你真的不明白你的意思。 canvas
没有界限,除非你使用Stencil
。当您尝试在ScrollView
之外绘制时,窗口小部件空间中的内容将被隐藏,因为它最初使用Stencil
以便隐藏不必要的内容,您可以滚动浏览它,如您所见{ {3}}
现在关于那个重叠。在第二个canvas.after
之前Color
在绘制小部件后绘制它。与canvas.before
类似,后者用于背景。
canvas:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
canvas.after:
...
基本canvas
是在小部件的“相同”时间内绘制的,因此无论您做什么,以后绘制的项目都将位于顶部。 after
将在使用该顺序再次绘制之后进行绘制,并且before
在完成甚至绘制小部件之前执行相同的操作。
如何限制ScrollView的内容?那么,我可以更改滚动边界吗?我的意思是,我不希望孩子们超越小部件中的某个点,使他们不触摸边框
使用固定大小的布局来处理它的孩子的位置,例如FloatLayout
pos_hint
或BoxLayout
取决于您的需要,因此会将小部件推入虚构的矩形,基本上是[0,0]到[宽度,高度]即大小你的布局(如果你正确使用它)。