Kivy 앱을 코딩 할 때 width
테스트를 위해 사용자 정의 위젯 정의에 약간의 속성을 넣었습니다 . 내 함수는 새로운 너비를 만들어야 했고이 너비는 어디에도 사용해서는 안됩니다. 그래서 시간이 지남에 따라 제거하는 것을 잊었습니다. 하지만 이제 코드를 정리하고 제거하려고했을 때 height
위젯이 깨졌습니다. 높이도 동적이지만 새 너비가 할당 된 후에 높이 생성이 발생하므로 위젯의 초기 너비와 관련이 없습니다. 그래서 나는 이것을 일으키는 원인에 대해 다소 혼란 스럽습니다. 참고 : 보호 된 속성을 사용하여 높이를 계산합니다. 아마도 책임이 있습니까? 나는 빠른 더러운 앱을 모아서 추악함을 용서했지만 가능한 한 코드를 줄이려고 노력했습니다.
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
global msg_stack
msg_stack = []
Builder.load_string('''
<Custom>:
x: 5
width: 500
BoxLayout:
pos: root.pos
height: self.height
TextInput:
pos: root.pos
size: root.size
id: msg
readonly: True
text: str(msg)
''')
class Custom(Widget):
pass
class TestApp(App):
def build(self):
msg = "A bunch of random words: words, words, words, words, words"
inst = Custom()
inst.ids['msg'].text = msg
inst.width = 500
inst.height = (len(inst.ids['msg']._lines_labels) + 1) * (inst.ids['msg'].line_height + 2)
for i in inst.walk():
i.height = inst.height
i.width = inst.width
bl = BoxLayout(orientation="vertical")
bl.add_widget(inst)
return bl
TestApp().run()
따라서이 속성을 500으로 설정하면 높이가 줄 수에 딱 맞습니다 ( msg
변수에 텍스트를 더 추가하면 알 수 있음 ). 하지만 50과 같이 다른 것으로 바꾸면 갑자기 높이가 올라갑니다.
다음은 해부 시도입니다.
원래는 width
의 Custom
를 500으로 설정했습니다. 에서는 이 원래 크기에서 표시하는 데 필요한 줄을 계산하는에 build
텍스트가 할당 TextInput
되므로 1 줄이됩니다. 당신은 설정하면 width
KV 부분에 50, 인스턴스화하기 전에, 다음은 TextInput
텍스트를 표시하기 위해 더 많은 라인이 필요합니다, 어떤 제약 조건에 넣지 이후 height
, 그것은 (주석에 의해 당신이 볼 수있는 기본이 100이 될 것입니다 inst.width = ...
및 inst.height = ...
에 build
) . 이제 주석을 달고 inst.width = ...
그대로두면 inst.height = ...
높이가 변경됩니다. 실제로 모든 텍스트를 표시하려면 16 줄이 필요하기 때문입니다. 그리고 inst.width = 500
그 선 바로 앞에 설정 하면 컨테이너가 넓어지고 새 높이가 계산됩니다 (이는 여전히 TextInput
의 크기를 기반으로합니다 .BoxLayout
크기는 변경되지 않음), 그런 다음 자식을 살펴보고 Custom
높이가 높은 위젯의 크기로 명시 적으로 크기를 설정합니다 .
나는 당신이 결국 달성하고 싶은 것이 확실하지 않지만 이것은 당신이 얻는 결과를 설명해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다