2017-03-03 3 views
2

설정 패널의 ColorPicker :Kivy - 나는 기본 설정 패널이

[ 
    { "type": "title", 
     "title": "Test application" }, 

    {"type": "buttons", 
    "title": "Title here", 
    "desc": "desc here", 
    "section": "some section", 
    "key": "configchangebuttons", 
    "buttons":[ 
     {"title":"Add","id":"button_add"}, 
     {"title":"Del","id":"button_delete"}, 
     {"title":"Rename","id":"button_rename"} 
    ]}, 

    { "type": "numeric", 
     "title": "My second key", 
     "desc": "Description of my second key", 
     "section": "section1", 
     "key": "key2" } 
] 

내가 문서를 읽을 수 있지만 난 정말 실제로 출시하기 위해 패널에 액션 버튼을 추가하려면이 방법을 볼 수 없습니다를 색상 선택기를 사용하여 결과를 가져 와서 ini 파일에 저장합니다.

설정 패널에 새 개체 (버튼)를 등록하려고했지만 잘 작동하지 않습니다.

내가 목표로하는 것은 사용자가 선택한 색상의 RGB 코드를 가져 와서 그것을 읽을 곳에서부터 ini 파일에 저장하는 것입니다.

이 내가

class SettingButtons(SettingItem): 

    def __init__(self, **kwargs): 
     self.register_event_type('on_release') 
     super(SettingItem, self).__init__(**kwargs) 
     for aButton in kwargs["buttons"]: 
      oButton=Button(text=aButton['title'], font_size= '15sp') 
      oButton.ID=aButton['id'] 
      self.add_widget(oButton) 
      oButton.bind (on_release=self.On_ButtonPressed) 

    def set_value(self, section, key, value): 
     # set_value normally reads the configparser values and runs on an error 
     # to do nothing here 
     return 

    def On_ButtonPressed(self,instance): 
     self.panel.settings.dispatch('on_config_change',self.panel.config, self.section, self.key, instance.ID) 

를 추가하는 시도 버튼입니다 그리고 여기에 인스턴스를 등록 :

def build_settings(self, settings): 
    settings.register_type('buttons', SettingButtons) 
    with open("settings.json", "r") as settings_json: 
     settings.add_json_panel('B4A settings', self.config, data=settings_json.read()) 

을하지만 난이 응용 프로그램을 시작할 때 내가 얻을 :

TypeError: object.__init__() takes no parameters와 나는 이것을 알고 build_settings의 register_type 부분에 있습니다.

EDIT

더 많은 조사가 끝나면이 방법이 작동하고 단추가 설정 패널에 표시되지만 APK가 휴대 전화에서 만들어지고 실행되는 경우에만 표시됩니다. 내 리눅스에서 응용 프로그램을 실행하면 위의 오류가 발생합니다. 이 방법을 우회하는 방법?

FloatLayout('blob') 

을하고 그래서 파이썬 3. 나를 위해 잘 작동하는 경우 : 그건 그냥이 너무 충돌 할 의미하는 것 FloatLayout, 때문에,

답변

1

아니, not Settings.register_type()'s fault이다, 아니다 SettingItem의 오류 FloatLayout, SettingItem, Settings이 아니며 올라가고 있습니다 (기본적으로 '기본'클래스에서 내려갑니다). 그러면 SettingButtons에 있습니다. 간단한 인쇄가 잘못 무엇을 말할 것이다 : 파이썬 3의 변화가 있었다

print(kwargs) 

object 자체에 아래 키워드 인수를 전달할 수 금지 (I 변경하거나 격려의 정확한 URL을 찾을 수 없습니다) . 에 **kwargs를 전달하는 대신

:

def __init__(self, title, buttons, **kwargs): 
    print(kwargs) 
    self.register_event_type('on_release') 
    super(SettingItem, self).__init__(**kwargs) 
    for aButton in buttons: 
     oButton=Button(text=aButton['title'], font_size= '15sp') 
     oButton.ID=aButton['id'] 
     self.add_widget(oButton) 
     oButton.bind (on_release=self.On_ButtonPressed) 

def set_value(self, section, key, value): 
    # set_value normally reads the configparser values and runs on an error 
    # to do nothing here 
    return 
+0

파이썬 3.0을 사용하여 작성했지만 python 2.7로 빌드 되었기 때문에이 코드는 내 안드로이드에서 작동합니다. – Nick

+0

@ 닉 그래, Python 2와 3 호환 코드를 동시에 작성하거나 py3을 크게 작성하면 py3 코드 만 작성한다. – KeyWeeUsr

+0

잘 파이썬 3을 대상으로 합니다만, buildozer/python-for-android는 파이썬 2로 어떤 이유로 든 팩을합니다. – Nick

1

내가 내 버튼 문제를 해결하기 위해 다음과 같은 방법으로 관리 위의 말을 고려 : 당신이 set_value()에 언급 예상 오류에 도달 할 때까지

이 코드는 작동 다음과 같은 init 내부의 슈퍼 :

내가 한 것은 Python 3 방식을 사용하고 sup 다음과 같은 인수없이 초기화 할 수 있습니다 :

super(SettingItem, self).__init__() 

그리고 이렇게하면 작동합니다.이제 버튼의 설정 메뉴에서 직접 색상 선택기를 사용할 수 있습니다.

@KeyWeeUsr에게 승인 된 답변을 드릴 것입니다. 그 대답은 저에게이 결론을 이끌어 냈기 때문입니다.

+0

그냥 메모로 여기는 설정로드시 실제로 문제를 해결합니다. 실제로는 버튼을 사용하면됩니다. 키워드 인수를 전달해야합니다. 이 픽스를 사용하면 설정 패널의 모양을 시각적으로 디버깅 할 수 있습니다. – Nick