【问题标题】:How do I get the size of an RstDocument in Kivy?如何在 Kivy 中获取 RstDocument 的大小?
【发布时间】:2016-12-21 07:42:54
【问题描述】:

这感觉像是一个愚蠢的问题,但在过去的几天里,我一直在上网,但对于看似非常简单的事情却无济于事。无论如何,我想要做的是拥有一个具有 RstDocument 叶子的 TreeView 小部件。现在,当我这样做时,我会得到一堆叶子,它们的窗口较小,与这个人相似:Kivy Making a Custom TreeViewNode

他们的解决方案对我不起作用,因为 RstDocument 对象没有与之关联的纹理对象。经过进一步研究,它似乎没有任何与此像素大小相关的属性,它继承的 ScrollView 布局也没有。试图找到这样的数字会给我提供 100 像素大小的东西,这不是正在显示的内容。

理想情况下,我试图让 RstDocument 在扩展时完全显示,以便最终用户滚动浏览树,折叠他们不需要的内容。我不需要 RstDocument 滚动,因为 ScrollView 已经在 TreeView 小部件上。

代码尽可能合法:

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()

还有结果图片:

【问题讨论】:

    标签: android python treeview scrollview kivy


    【解决方案1】:

    没关系,我找到了问题的解决方案。我会把它贴在这里,以供有相同或相似问题的其他人参考。

    我在尝试从 RstDocument 对象中获取大小时遇到​​的问题是,当时节点仍处于折叠状态,因此对象的高度为 0。打开时,从 ScrollView 继承的 viewport 属性具有滚动前文档的大小(以像素为单位)。它不是 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 前几天的编辑。

    另外,感谢大家对这个网站的关注。这是我第一次发布问题,但它有助于回答我过去遇到的许多问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多