2015-02-03 2 views
2

kivy 슬라이더의 간격을 변경하고 싶습니다. 지금까지 스크롤바와 원을 변경하는 데 필요한 적절한 속성을 찾지 못했습니다. 캔버스 작업을 사용하여 생성 된 것 같습니다.kivy에서 슬라이더를 사용자 정의하는 방법

내 비전은 이동 가능한 원 아래에 현재 값을 표시하여 슬라이더를 확장하는 것입니다.

아이디어가 있으십니까?

일부 코드 :

class templPowerSlider(): 
    kivy.lang.Builder.load_string(''' 
<[email protected]>: 
    sp: sp 
    sl: sl 
    val: val 

    Spinner: 
     id: sp 
     values: ['mW', '%'] 
     text: '%' 
     size_hint_x: 0.1 
     on_text: root.onSel(*args) 

    Slider: 
     id: sl 
     size_hint_x: 0.7 

    TextInput: 
     id: val 
     size_hint_x: 0.2 
     text: "%3.1f" % sl.value 
     multiline: False 
     on_text_validate: root.onTextEnter(*args) 
''') 

    def __init__(self, **kwargs): 
     super(templPowerSlider, self).__init__(**kwargs) 
     pass 

    def onSel(self, a, b): 
     print ('aaa') 

    def onTextEnter(self, a, b): 
     print ('bb') 

답변

3

예, Slider의 UI가 캔버스에 작성하고 표시를 수정 할 속성이 존재하지 않습니다.

<[email protected]>: 
    .... 

- 알려줍니다 Kivy 이전 규칙을 무시하고 처음부터이 MySlider 위젯을 구축 : 당신이 좋아하는 경우에, 당신은 Slider가 KV 디자인을 재정 의하여 표시되는 방식을 변경할 수 있습니다. 디스플레이를 약간만 수정하려는 경우 이전 규칙을 style.kv에서 복사 할 수 있습니다.

그러나 값 텍스트를 추가하려는 경우 반드시 기존 UI를 수정할 필요는 없습니다.

<[email protected]>: 
    Label: 
     pos: (root.value_pos[0] - sp(16), root.center_y - sp(27)) if root.orientation == 'horizontal' else (root.center_x - sp(27), root.value_pos[1] - sp(16)) 
     size_hint: None, None 
     size: sp(32), sp(32) 
     text: str(root.value) 

이 바로 Slider 핸들 아래 Label을 추가 여기에 내가 생각 해낸 간단한 예입니다.

+0

예! - 시원하고 간단한 솔루션. 결코 쉬운 일이라고 생각하지 않았습니다.Maybee 당신은 kv 파일의 템플릿과 python으로 작성된 코드를 어떻게 혼합하는지에 대한 조언을 해줄 수 있습니다. 질문에서 주어진 (나쁜) 예제는 작동하지 않습니다. 루트가 BoxLayout이고 호출해야하는 함수가 상속 된 클래스 인 templPowerSlider에 있기 때문입니다. 그 문제에 대한 좋은 해결책? –

+1

Python 클래스 위젯과 동적 클래스 위젯이 혼합되어 있습니다. 둘 중 하나를 선택해야합니다. 이 경우,'TemplPowerSlider (BoxLayout) :'와' :'를 사용해야합니다. ** 항상 ** 위젯 클래스의 첫 글자를 대문자로 표기해야합니다. –

관련 문제