Kivy 制作自定义 TreeViewNode

Mag*_*les 2 treeview kivy kivy-language

我正在尝试创建一个自定义 TreeViewNode 以与 TreeView 一起使用。只想要一个旁边带有标签的图像,仅此而已。

然而,尝试创建一个自定义节点......即使在源代码中复制它的完成方式也不会产生相同的结果。

TreeViewlabel 实际上只是一个带有注释的类声明

class TreeViewLabel(Label, TreeViewNode):
'''there's just a comment here'''
Run Code Online (Sandbox Code Playgroud)

这是我用于比较的 TreeViewLabel 版本

class TreeViewImageLabel(Label, TreeViewNode):
"""oh boy this is a comment"""
Run Code Online (Sandbox Code Playgroud)

尝试创建此代码的副本并将其添加到树中会产生以下结果。我的版本是第一个标签,后面的标签是默认的TreeViewLabel 在此处输入图片说明

它全部间隔开,未对齐且巨大。没有什么比 kivy 附带的 TreeViewLabel 更整洁了。

到底他妈发生了什么?它不仅看起来与 TreeViewLabel 完全不同,而且尝试使用 size、size_hints、pos 等配置小部件也不会改变该标签相对于树的位置。

我最初的计划是让我的节点从一个带有图像和标签的盒子布局继承,但是随着自定义节点的大小调整,根据我现在所知道的情况,不可能得到任何看起来像 TreeViewNode 的东西。

找到了解决办法

所以这是修复实施后的样子: 在此处输入图片说明

对于其他想要像我一样制作带有图片和标签的 TreeViewNode 的人来说,这是使其工作的代码:

#python
class TreeViewImageLabel(BoxLayout, TreeViewNode):
    pass
Run Code Online (Sandbox Code Playgroud)

和.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"
Run Code Online (Sandbox Code Playgroud)

Rya*_*n P 5

您只复制了TreeViewLabel课程的一部分。您重新创建了 Python 类,但也应用了一个kv 规则

<TreeViewLabel>:
    width: self.texture_size[0]
    height: max(self.texture_size[1] + dp(10), dp(24))
    text_size: self.width, None
Run Code Online (Sandbox Code Playgroud)