【问题标题】:How to draw line in each widget in Python Kivy如何在 Python Kivy 中的每个小部件中画线
【发布时间】:2020-12-22 01:59:16
【问题描述】:

我正在尝试在标签上显示二叉树。如何在每个标签内从中心到左右边缘绘制线条?这个任务很奇怪,我理解,但是你我需要用最基本的 Kivy 对象展示一个自写的树。不能使用基维树。互联网上的所有解决方案都只针对触摸屏。

在这个循环中,我添加带有节点值的标签,如果未找到节点,则为 0

class TreeApp(App):
    def build(self):
        bl = BoxLayout(orientation='vertical', padding=5, spacing=5)
            for i in range(maxdepth):
                inside_bl = BoxLayout(orientation='horizontal')
                for j in range(2 ** i):
                    try: inside_bl.add_widget(Label01(text=str(mx_lvl[i][j]),color=(0.5,0.5,0.5,1)))
                    except: inside_bl.add_widget(Label111(text="0",color=(0.5,0.5,0.5,0.5)))
                bl.add_widget(inside_bl)
        return bl

在这里,我尝试创建类 label01。我想用自我。将为每个标签创建自己的线,并相对于标签的原点或中心进行绘制。

class Label01(Label):
    def __init__(self,**kwargs):
        super(Label01,self).__init__(**kwargs)

        with self.canvas:
            self.pos = self.pos
            Color(0,1,0,1)
            self.line= Line(points=(self.x+100,self.y+100,self.x+250,self.y+250),close = True)

标签 111 也是如此。我想使用 self.将为每个标签创建自己独特的线条,并相对于标签的原点或中心进行绘制。

  • tree.kv
#:kivy 1.11.1
<Label111>:
    canvas.before:
        Line:
            
            width: 2
            points: (self.x, self.y+50, self.x+200, self.y+100, self.x+300, self.y+200)
        Color:
            rgb: (0.9,0.9,0.9,0.9)
  • main.py:
class Label111(Label):
    pass

我在使用 self.我将在每个标签内获得一条测试线(总共 31 条),但我在窗口底部只有 2 条线。问题:如何在每个标签内相对于其中心绘制两条线?

【问题讨论】:

    标签: python kivy draw


    【解决方案1】:

    因为您在其__init__() 方法中为Label01 绘制线条,所以在设置Label01 的位置和大小之前绘制所有线条。所以所有的线都是使用Label01的默认位置绘制的,即(0,0)。由于您是在 python 代码中执行此操作,因此当 Label01 的位置发生更改时,没有绑定来调整行。

    这可以通过编写您自己的绑定来进行调整来解决,或者通过在kv 中定义行让kv 为您做这件事。像这样:

    <Label01>:
        canvas.before:
            Color:
                rgba: 0,1,0,1
            Line:
                points: self.center_x,self.center_y,self.center_x+250,self.center_y+250
    

    这些点是相对于Label01 的中心定义的(正如您所提到的),然后Label01 的定义变得简单:

    class Label01(Label):
        pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多