레이블에 이진 트리를 표시하려고합니다. 중앙에서 오른쪽 및 왼쪽 가장자리까지 각 레이블 내부에 선을 어떻게 그릴 수 있습니까? 이 작업은 매우 이상합니다. 이해합니다.하지만 가장 기본적인 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를 사용하는 것으로 생각했습니다. 각 레이블에 대해 고유 한 선을 만들고 레이블의 원점 또는 중심을 기준으로 그립니다.
#: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)
class Label111(Label):
pass
self를 사용할 때 그렇게 생각했습니다. 각 레이블 (총 31 개) 안에 테스트 라인이 표시되지만 창 하단에는 2 개 라인 만 있습니다. 질문 : 중심을 기준으로 각 레이블 내부에 두 개의 선을 어떻게 그리나요?
당신의 라인을 그리기 때문에 Label01
그것의 __init__()
방법을 모든 라인의 위치와 크기 전에 그려 Label01
설정됩니다. 따라서 모든 선은의 기본 위치 인 Label01
(0,0)을 사용하여 그려집니다 . 파이썬 코드에서이 작업을 수행하기 때문에의 위치 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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다