如何在Kivy中获取RstDocument的大小?

时间:2016-08-15 04:34:02

标签: android python treeview scrollview kivy

这感觉就像一个愚蠢的问题,但过去几天我已经爬上互联网,对于看似非常简单的事情无济于事。无论如何,我想要做的是有一个具有RstDocument离开的TreeView小部件。现在,当我这样做的时候,我得到了一堆叶子,这些叶子的窗口与这个人类似:Kivy Making a Custom TreeViewNode

他们的解决方案对我不起作用,因为RstDocument对象没有与之关联的纹理对象。经过进一步研究,它似乎没有任何与此大小相关的属性(以像素为单位),并且它继承的ScrollView布局也没有。试图找到这样的数字给我的东西给出100px的尺寸,这不是显示的。

理想情况下,我试图让它在扩展时完全显示RstDocument,因此最终用户滚动树,折叠他们不需要的东西。我不需要滚动RstDocument,因为ScrollView已经在TreeView Widget上了。

代码尽可能合法:

from kivy.app import App
from kivy.uix.treeview import TreeView
from kivy.uix.treeview import TreeViewLabel
from kivy.uix.treeview import TreeViewNode
from kivy.uix.scrollview import ScrollView
from kivy.uix.rst import RstDocument


class TreeViewRst (RstDocument,TreeViewNode):
        pass

class TreeApp (App):   
    def build (self):
        root = StackLayout()
        scroll = ScrollView(pos = (0, 0),size_hint=(1,0.78))
        body = TreeView(hide_root=True,indent_level=0,size_hint=(1,None))
        body.bind(minimum_height=body.setter('height'))
        intro = body.add_node(TreeViewLabel(text="Title",font_size=18))
        intro_diag = body.add_node(TreeViewLabel(text="Article"))

        body.add_node(TreeViewRst(source='lopsem.rst',size=(100,100)),parent=intro_diag)
        scroll.add_widget(body)
        root.add_widget(scroll)
        return root

Window.size = (360,640)
tree = TreeApp()
tree.run()

结果的照片:

enter image description here

1 个答案:

答案 0 :(得分:0)

没关系,我找到了解决问题的方法。我会在此发布,以供其他有相同或类似问题的人参考。

当我试图从RstDocument对象中获取大小时遇到​​的问题是,当节点仍然折叠时,对象的高度为0。打开时,从滚动视图继承的视口属性在滚动之前具有文档的大小(以像素为单位)。它不是100%,因为最初打开时的高度比实际高,当点击时更正,或者如果尝试滚动(所以我怀疑对象在这些事件发生之前不知道,计算是执行以确定)。

这是我做的:

from kivy.app import App
from kivy.uix.treeview import TreeView
from kivy.uix.treeview import TreeViewLabel
from kivy.uix.treeview import TreeViewNode
from kivy.uix.scrollview import ScrollView
from kivy.uix.rst import RstDocument
from kivy.core.window import Window
from kivy.uix.stacklayout import StackLayout


class TreeViewRst (RstDocument,TreeViewNode):
        pass

def update_size (event1,event2):
    event1.size = event1.viewport_size


class TreeApp (App):   
    def build (self):
        root = StackLayout()
        scroll = ScrollView(pos = (0, 0),size_hint=(1,0.78))
        body = TreeView(hide_root=True,indent_level=0,size_hint=(1,None))
        body.bind(minimum_height=body.setter('height'))
        intro = body.add_node(TreeViewLabel(text="Title",font_size=18))
        intro_diag = body.add_node(TreeViewLabel(text="Article"))

        test = body.add_node(TreeViewRst(source='lopsem.rst',size=(100,400)),parent=intro_diag)
        test.bind(on_scroll_start=update_size)
        scroll.add_widget(body)
        root.add_widget(scroll)
        return root

Window.size = (360,640)
tree = TreeApp()
tree.run()

结果是我所希望的:

Here it is!!!

我只是想感谢IceMAN前几天的编辑。

另外,感谢所有这个网站。这是我第一次发帖提问,但它有助于回答我过去的许多问题。

相关问题