2015-01-15 3 views
0

이 UI가 XBMC 용으로 만들어 졌으므로 응용 프로그램이 종료 된 다음로드 될 때 on/off 버튼의 상태를 저장 /로드 할 수 있기를 원합니다. 가장 쉬운 방법은 상태를 간단한 txt 파일에 저장하고 시작할 때로드하는 것이라고 생각했습니다. 따라서 첫 번째 단계는 시작할 때 목록에서 상태를로드하는 것입니다. 버튼에 값을 보내려면 어떻게해야합니까? 그리고 내 코드를보다 효율적으로 만들 수있는 방법이 있습니까?파일에서 상태 저장 및로드

import os 
import xbmc, xbmcaddon, xbmcgui 
from pyxbmct.addonwindow import * 

_addon = xbmcaddon.Addon() 
_addon_path = _addon.getAddonInfo('path').decode('utf-8') 


class MyAddon(AddonDialogWindow): 

    def __init__(self, title=''): 
     super(MyAddon, self).__init__(title) 
     self.setGeometry(700, 450, 8, 5) 
     self.set_info_controls() 
     self.set_active_controls() 
     self.set_navigation() 
     # Connect a key action (Backspace) to close the window. 
     self.connect(ACTION_NAV_BACK, self.close) 

    def set_info_controls(self): 
     # Labels 
     no_int_label = Label('Inomhus', alignment=ALIGN_CENTER) 
     self.placeControl(no_int_label, 0, 0, 1, 2) 
     #L1 
     l1 = Label('Taklampan') 
     self.placeControl(l1, 1, 0) 
     #L2 
     l2 = Label('Pentry') 
     self.placeControl(l2, 2, 0) 
     #L3 
     l3 = Label('Ljuslist') 
     self.placeControl(l3, 3, 0) 
     #L4 
     l4 = Label('Stereo') 
     self.placeControl(l4, 4, 0) 
     #L5 
     l5 = Label('Lampa 5') 
     self.placeControl(l5, 1, 3) 
     #L6 
     l6 = Label('Lampa 6') 
     self.placeControl(l6, 2, 3) 
     #L7 
     l7 = Label('Lampa 7') 
     self.placeControl(l7, 3, 3) 
     #L8 
     l8 = Label('Lampa 8') 
     self.placeControl(l8, 4,3) 

    def set_active_controls(currentState): 
     int_label = Label('Utomhus', alignment=ALIGN_CENTER) 
     self.placeControl(int_label, 0, 3, 1, 2) 

     # R1 
     self.radiobutton1 = RadioButton('Off') 
     self.placeControl(self.radiobutton1, 1, 1) 
     self.connect(self.radiobutton1, self.radio_update) 
     # R2 
     self.radiobutton2 = RadioButton('Off') 
     self.placeControl(self.radiobutton2, 2, 1) 
     self.connect(self.radiobutton2, self.radio_update) 
     # R3 
     self.radiobutton3 = RadioButton('Off') 
     self.placeControl(self.radiobutton3, 3, 1) 
     self.connect(self.radiobutton3, self.radio_update) 
     # R4 
     self.radiobutton4 = RadioButton('Off') 
     self.placeControl(self.radiobutton4, 4, 1) 
     self.connect(self.radiobutton4, self.radio_update) 
     # R5 
     self.radiobutton5 = RadioButton('Off') 
     self.placeControl(self.radiobutton5, 1, 4) 
     self.connect(self.radiobutton5, self.radio_update) 
     # R6 
     self.radiobutton6 = RadioButton('Off') 
     self.placeControl(self.radiobutton6, 2, 4) 
     self.connect(self.radiobutton6, self.radio_update) 
     # R7 
     self.radiobutton7 = RadioButton('Off') 
     self.placeControl(self.radiobutton7, 3, 4) 
     self.connect(self.radiobutton7, self.radio_update) 
     # R8 
     self.radiobutton8 = RadioButton('Off') 
     self.placeControl(self.radiobutton8, 4, 4) 
     self.connect(self.radiobutton8, self.radio_update) 

     # Button 
     self.button = Button('Close') 
     self.placeControl(self.button, 7, 2) 
     self.connect(self.button, self.close) 

    def set_navigation(self): 
     self.setFocus(self.button) 

    def radio_update(self): 
     # Update radiobutton caption on toggle 
     if self.radiobutton1.isSelected(): 
      self.radiobutton1.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r1 -s on") 
     else: 
      self.radiobutton1.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r1 -s off") 
     if self.radiobutton2.isSelected(): 
      self.radiobutton2.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r2 -s on") 
     else: 
      self.radiobutton2.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r2 -s off") 
     if self.radiobutton3.isSelected(): 
      self.radiobutton3.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r3 -s on") 
     else: 
      self.radiobutton3.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r3 -s off") 
     if self.radiobutton4.isSelected(): 
      self.radiobutton4.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r4 -s on") 
     else: 
      self.radiobutton4.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r4 -s off") 
     if self.radiobutton5.isSelected(): 
      self.radiobutton5.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r5 -s on") 
     else: 
      self.radiobutton5.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r5 -s off") 
     if self.radiobutton6.isSelected(): 
      self.radiobutton6.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r6 -s on") 
     else: 
      self.radiobutton6.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r6 -s off") 
     if self.radiobutton7.isSelected(): 
      self.radiobutton7.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r7 -s on") 
     else: 
      self.radiobutton7.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r7 -s off") 
     if self.radiobutton8.isSelected(): 
      self.radiobutton8.setLabel('On') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r8 -s on") 
     else: 
      self.radiobutton8.setLabel('Off') 
      os.system("/usr/local/sbin/pilight-control -l husvagn -d r8 -s off") 

    def setAnimation(self, control): 
     # Set fade animation for all add-on window controls 
     control.setAnimations([('WindowOpen', 'effect=fade start=0 end=100 time=500',), 
           ('WindowClose', 'effect=fade start=100 end=0 time=500',)]) 



def main(): 


    window = MyAddon('HusLjus') 
    window.doModal() 

if __name__ == '__main__': 
    main() 

답변

0

필자는 (현재 야간에) 이벤트 라이브러리를 사용하여이 파일을 본질적으로 직접 수행합니다. 작은 스 니펫 :

{ 
    "devices": { 
     "speakers": { 
      "protocol": [ "kaku_switch" ], 
      "id": [{ 
       "id": 12345, 
       "unit": 0 
      }], 
      "state": "off" 
     }, 
     "xbmcControls": { 
      "protocol": [ "xbmc" ], 
      "id": [{ 
       "server": "127.0.0.1", 
       "port": 9090 
      }], 
      "action": "home", 
      "media": "none" 
     } 
    }, 
    "rules": { 
     "speakers-on": { 
      "rule": "IF xbmcControls.action IS play THEN switch DEVICE speakers TO on", 
      "active": 1 
     }, 
     "speakers-off": { 
      "rule": "IF xbmcControls.action IS pause OR xbmcControls.action IS home THEN switch DEVICE speakers TO off", 
      "active": 1 
     } 
    } 
... 
} 

모두 제대로 작동합니다.

+0

오! UI로 중계 판을 제어하기 위해 필 라이트 (pilight)를 사용하고 있습니다. 귀하의 솔루션은 자동으로 전환되는 것으로 보입니까? – user3551404

+0

ofc 당신은 또한 릴레이 보드를 사용할 수 있습니다. – pilight

+0

버튼을 사용하여 조명을 제어하고 있습니까? 아니면 XBMC의 이벤트입니까? – user3551404