2016-08-15 182 views
1

这感觉就像一个愚蠢的问题,但过去几天我一直在爬行互联网,无济于事似乎很简单。无论如何,我想要做的是有一个TreeView小部件,它具有RstDocument叶子。现在,当我这样做时,我得到了一堆叶子,其窗口与这个人类似:Kivy Making a Custom TreeViewNode如何获得Kivy中RstDocument的大小?

他们的解决方案对我不起作用,因为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

回答

0

没关系,我找到了解决我的问题。我会在这里发布它,以便参考其他有相同或类似问题的人。

我在试图从RstDocument对象中获取大小时遇到​​的问题是,在节点仍处于折叠状态时,此对象的高度为0。打开时,从ScrollView继承的视口属性具有滚动前文档的像素大小。它不是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!!!

我只是想感谢冰人从那天编辑。

此外,感谢所有这个网站。这是我第一次发表一个问题,但它回答了我过去曾经遇到过的许多问题。