Kivy 制作自定义 TreeViewNode
Kivy Making a Custom TreeViewNode
我正在尝试创建一个自定义 TreeViewNode 以与 TreeView 一起使用。
只想要旁边有标签的图片,仅此而已。
但尝试创建自定义节点...即使复制它在源中的完成方式也不会产生相同的结果。
TreeViewlabel 实际上只是一个 class 带有注释的声明
class TreeViewLabel(Label, TreeViewNode):
'''there's just a comment here'''
这是我用于比较的 TreeViewLabel 版本
class TreeViewImageLabel(Label, TreeViewNode):
"""oh boy this is a comment"""
好吧,尝试创建此代码的副本并将其添加到树中会产生以下结果。我的版本是第一个标签,后面的标签都是默认的TreeViewLabel
它全部间隔开,未对齐且巨大。没有什么比 kivy 自带的 TreeViewLabel 更整洁了。
这到底是怎么回事?它不仅看起来一点也不像 TreeViewLabel,而且尝试使用大小、size_hints、pos 等配置小部件也不会改变该标签相对于树的位置。
我最初的计划是让我的节点继承一个带有图像和标签的盒子布局,但是根据我现在所知道的,自定义节点的大小不可能得到任何看起来像 TreeViewNode 的东西。
找到解决方案
这是实施修复后的样子:
对于像我一样想要制作带有图片和标签的 TreeViewNode 的任何人,这是让它工作的代码:
#python
class TreeViewImageLabel(BoxLayout, TreeViewNode):
pass
还有 .kv
#kivy language
<TreeViewImageLabel>:
height: max(lbl.texture_size[1] + dp(10), dp(24))
Image:
size: (max(lbl.texture_size[1] + dp(10), dp(24)), max(lbl.texture_size[1] + dp(10), dp(24)))
size_hint: (.05, 1)
id:img
source: "smiley.png"
Label:
size_hint: (.9, 1)
id:lbl
text_size: self.width, None
text: "test"
您只复制了 TreeViewLabel
class 的一部分。您重新创建了 Python class,但还有一个 kv rule which is applied as well:
<TreeViewLabel>:
width: self.texture_size[0]
height: max(self.texture_size[1] + dp(10), dp(24))
text_size: self.width, None
我正在尝试创建一个自定义 TreeViewNode 以与 TreeView 一起使用。 只想要旁边有标签的图片,仅此而已。
但尝试创建自定义节点...即使复制它在源中的完成方式也不会产生相同的结果。
TreeViewlabel 实际上只是一个 class 带有注释的声明
class TreeViewLabel(Label, TreeViewNode):
'''there's just a comment here'''
这是我用于比较的 TreeViewLabel 版本
class TreeViewImageLabel(Label, TreeViewNode):
"""oh boy this is a comment"""
好吧,尝试创建此代码的副本并将其添加到树中会产生以下结果。我的版本是第一个标签,后面的标签都是默认的TreeViewLabel
它全部间隔开,未对齐且巨大。没有什么比 kivy 自带的 TreeViewLabel 更整洁了。
这到底是怎么回事?它不仅看起来一点也不像 TreeViewLabel,而且尝试使用大小、size_hints、pos 等配置小部件也不会改变该标签相对于树的位置。
我最初的计划是让我的节点继承一个带有图像和标签的盒子布局,但是根据我现在所知道的,自定义节点的大小不可能得到任何看起来像 TreeViewNode 的东西。
找到解决方案
这是实施修复后的样子:
对于像我一样想要制作带有图片和标签的 TreeViewNode 的任何人,这是让它工作的代码:
#python
class TreeViewImageLabel(BoxLayout, TreeViewNode):
pass
还有 .kv
#kivy language
<TreeViewImageLabel>:
height: max(lbl.texture_size[1] + dp(10), dp(24))
Image:
size: (max(lbl.texture_size[1] + dp(10), dp(24)), max(lbl.texture_size[1] + dp(10), dp(24)))
size_hint: (.05, 1)
id:img
source: "smiley.png"
Label:
size_hint: (.9, 1)
id:lbl
text_size: self.width, None
text: "test"
您只复制了 TreeViewLabel
class 的一部分。您重新创建了 Python class,但还有一个 kv rule which is applied as well:
<TreeViewLabel>:
width: self.texture_size[0]
height: max(self.texture_size[1] + dp(10), dp(24))
text_size: self.width, None