2016-08-15 91 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!!!

我只是想感謝冰人從那天編輯。

此外,感謝所有這個網站。這是我第一次發表一個問題,但它回答了我過去曾經遇到過的許多問題。