我正在研究一個kivy應用程序,它從sqlite3數據庫中提取數據並使用它填充一個TreeView。當我展開一些組時,TreeView變得太大而不適合放在我的屏幕上,所以我想將它放在ScrollView中,這樣我仍然可以向下滾動並查看已離開屏幕底部的項目。我可以得到一個基本的ScrollView來工作,但是當我把它放在TreeView裏面的時候,沒有滾動,我的TreeView的頂部不在屏幕的頂部。Kivy ScrollView中的TreeView - No Scroll
我已經下調了代碼到,如果沒有一個.kv文件運行這個問題的工作示例:
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.treeview import TreeView, TreeViewNode
from kivy.uix.treeview import TreeViewLabel
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.button import Button
class TreeViewButton(Button, TreeViewNode):
pass
modGroups = [u'Fruit', u'Fruit', u'Meat', u'Dairy', u'Dairy', u'Fruit']
modItems = [u'Apple', u'Pear', u'Spam', u'Egg', u'Milk', u'Banana']
modDict = dict()
modDictUnique = dict()
def populate_tree_view(tv):
modDict = zip(modGroups, modItems)
print modGroups
print modItems
for k, v in modDict:
if k not in modDictUnique:
modDictUnique[k] = [v]
else:
modDictUnique[k].append(v)
sortedGroups = modDictUnique.keys()
sortedGroups.sort()
#print modItems
#print modDictUnique
n = tv.add_node(TreeViewLabel(text='Food', is_open=True))
for group in sortedGroups:
g = tv.add_node(TreeViewLabel(text='%s' % group), n)
for item in modDictUnique[group]:
tv.add_node(TreeViewButton(text='%s' % item), g)
class POSFMApp(App):
def build(self):
layout = GridLayout(cols=1, spacing=50, size_hint_y=None,width=800)
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)
tv = TreeView(root_options=dict(text='Tree One'), hide_root=True, indent_level=4, minimum_height=5000)
populate_tree_view(tv)
layout.add_widget(tv)
root = ScrollView(size_hint=(None, None), size=(800, 700))
root.center = Window.center
root.add_widget(layout)
return root
if __name__ == '__main__':
POSFMApp().run()
在我的實際應用,modGroups和modItems從sqlite3的數據庫被填充,但這個例子提出的問題,而不必亂搞sqlite3。我把在(註釋)線:
#for i in range(30):
# btn = Button(text=str(i), size=(480, 40),
# size_hint=(None, None))
# layout.add_widget(btn)
從這個kivy ScrollView example表明,如果我取消這些行註釋掉了我的TreeView三線
tv = TreeView(root_options=dict(text='Tree One'), hide_root=True, indent_level=4, minimum_height=5000)
populate_tree_view(tv)
layout.add_widget(tv)
然後我就可以得到一個工作當我使用我的鼠標的滾輪時,滾動視圖的滾動條在右側。
我最好的猜測是,TreeView不會告訴ScrollView它的垂直時間有多長,所以ScrollView沒有意識到它需要在Y軸上滾動。雖然這只是一個猜測。
我怎樣才能讓TreeView在ScrollView中工作,這樣我就可以通過我的TreeView滾動(特別是在y軸上)?
你可以添加GUI的快照,我正在尋找類似於你已經實現的東西 – 2016-03-03 11:21:06