Расширенная кнопка

ButtonEx

Расширенная кнопка

from extronlib.ui import Button
from extronlib.system import ProgramLog
from extronlib import event

class ButtonEx(Button):
    def __init__(self, room, ID, holdTime=None, repeatTime=None):
        self.UIHost = room.UIHost
        self.id = ID
        self.room = room
        Button.__init__(self, self.UIHost, self.id, holdTime, repeatTime)
        self.eventsFunc = {}  
        self.__indicator = False
        self.__switch = False
        self.__state = False
        event(self, ['Pressed','Released','Held','Tapped','Repeated'])(self.__event)   
    
    @property
    def Suffix(self):
        return self.Name.split('_')[-1]
    
    @property
    def Number(self):
        return int(self.Name.split('_')[-1])
    
    @property
    def SwitchState(self):
        return self.__state
    
    @property
    def IsIndicator(self):
        return self.__indicator
           
    @property
    def IsSwitch(self):
        return self.__switch
    
    def __event(self, b, s):
        if self.__indicator == True: return
        if self.__switch == False:
            {
                'Pressed':  lambda: self.SetState(1),
                'Released': lambda: self.SetState(0),
                'Held':     lambda: self.SetBlinking('Fast',[0,1]),
                'Tapped':   lambda: self.SetState(0),
                'Repeated': lambda: None,
            }.get(s)()

        try:
            if self.eventsFunc.get(s):
                self.eventsFunc.get(s)(b,s)   
        except Exception as e:
            ProgramLog('[{}]: {}'.format(__name__, e))	   

    def Listener(self, func, state):
        s=[]
        s.extend(state)  if type(state)  in (list, tuple,)  else s.append(state)
        if hasattr(self.room, func) and callable(getattr(self.room, func)):
            for s1 in s:
                event(self, s1)(self.__event) 
                self.eventsFunc[s1] = getattr(self.room, func)
        # else:
        #     ProgramLog('No [{}] method in parent'.format(func),'warning')	

            
    def MakeIndicator(self, state=True):
        self.__indicator = state
        self.SetState(0)

    def MakeSwitch(self, state=True):
        self.__switch = state  
        self.SwitchReset()      
            
    def SwitchToggle(self):
        self.__state = not self.__state
        self.SetState(int(self.__state))
        return self.__state

    def SwitchSet(self):
        self.__state = True
        self.SetState(int(self.__state))
        
    def SwitchReset(self):
        self.__state = False
        self.SetState(int(self.__state))

Создаем словарь типа (tupple, dict):

  • Ключ (tuple) - имена (или id) кнопок;

  • Значение - словарь параметров:

    • func - имя вызываемого метода (обязательно);

    • action - список событий (по умолчанию - Released);

    • holdTime - время удержания (по умолчанию - None);

    • repeatTime - время между повторами (по умолчанию - None);

    • switch- состояние определяется программой (по умолчанию - False);

    • indicator- определяет будет ли ожидаться событие или работает как индикатор(по умолчанию - False);

Last updated