def active(self, holder): super().active(holder) if self._config.has_ups_lite: self._list = [ '电池电压:{:.2f}V'.format(self._voltage), '电池容量:{:.0f}%'.format(self._capacity), 'hengying', '2021/1', '关机' ] return ListControl(holder, self.title, self._list) else: self._list = ['hengying', '2021/1', '关机'] return ListControl(holder, self.title, self._list)
def handle_event(self, event): super().handle_event(event) if type(event) == ServerConnected: print('server connect!') self._client = event.client self._client.subscribe(MUSIC_REPLY_TOPIC_SUBSCRIBE) elif type(event) == MessageReceived: if event.msg.topic == MUSIC_TOPIC_ROOT + 'list_music/reply': if self._holder is not None: payload = event.msg.payload.decode('UTF-8') print('music list: ', payload) client_id, music_list_str = payload.split(':', 1) if client_id == self._holder.client_id: self._music_list = music_list_str.split(',') self._music_list_ctrl = ListControl(self._holder, self.title + '/'+ MUSIC_LIST, self._music_list) # 子系统不在激活状态,不要弹出 layer! if self._holder.is_actived(self.title): self._holder.add_layer(self._music_list_ctrl) elif type(event) == ListItemSelected: if event.list_name == self.title: if event.item_index == 0: self._client.publish(MUSIC_TOPIC_ROOT + 'play_random_one', payload='', qos=1) elif event.item_index == 1: self._client.publish(MUSIC_TOPIC_ROOT + 'list_music', payload=self._holder.client_id, qos=1) elif event.item_index == 2: self._client.publish(MUSIC_TOPIC_ROOT + 'stop', payload='', qos=1) elif event.list_name == self.title + '/'+ MUSIC_LIST: music_name = self._music_list[event.item_index] self._client.publish(MUSIC_TOPIC_ROOT + 'play', payload=music_name, qos=1) if type(event) == ListBack: if event.list_name == self.title: self._holder.add_event(PopLayer(1)) elif event.list_name == self.title + '/'+ MUSIC_LIST: self._holder.add_event(PopLayer(1))
def __init__(self): #initialize settings, check if user and lists files already exist self.settings = Settings() self.settings._file_check_username() self.settings._file_check_lists() #initialize list control options self.control = ListControl() #set the first key to be the active list by default self.active_list = next(iter(self.settings.lists)) #Capitalize the list name for output to the console self.display_active_list = self.active_list.title() #Set the key in the dictionary to which changes should be made self.current_key = self.settings.lists[self.active_list]
def active(self, holder): super().active(holder) return ListControl(holder, self.title, ['随机播放一首', '音乐列表', '停止'])
def active(self, holder): super().active(holder) return ListControl(holder, self.title, self._subsystems_name_list)
class MyList: """A class for multiple lists through which you can navigate""" def __init__(self): #initialize settings, check if user and lists files already exist self.settings = Settings() self.settings._file_check_username() self.settings._file_check_lists() #initialize list control options self.control = ListControl() #set the first key to be the active list by default self.active_list = next(iter(self.settings.lists)) #Capitalize the list name for output to the console self.display_active_list = self.active_list.title() #Set the key in the dictionary to which changes should be made self.current_key = self.settings.lists[self.active_list] def _check_if_list_empty(self): """Helper method to check if a list is empty or not""" if self.current_key: return True else: return False def _show_lists_by_number(self): """Convert dictionary keys into list and access them by key""" print('') for i in range(0, len(self.settings.lists)): print(f"\t{i+1} : {list(self.settings.lists.keys())[i].title()}") print('') def _print_current_list(self): """Output the current contents of the list""" if len(self.current_key) == 0: print("\n\tYour list is currently empty!") else: print("\nYour list so far: \n") for item in self.current_key: print(f"\t- {item}") print('') def change_active_list(self): """Set active list to work with""" print("\nWhich list should be your active list?") print("Type in 'q' to go back.\n") self._show_lists_by_number() print('') prompt = input("Please enter the number of the list: ") while True: if prompt != 'q' or prompt != 'quit': try: prompt = int(prompt) self.active_list = list(self.settings.lists.keys())[prompt-1] except ValueError: print("Please enter a valid list number!\n") break else: self.display_active_list = self.active_list.title() self.current_key = self.settings.lists[self.active_list] print(f"Your active list has been changed to {self.display_active_list}.\n") break else: break def run_program(self): """ Starting point for program Display a menu with choices """ while True: print(f"Active List: {self.display_active_list}\n") menu = { '1' : "Change the active list", '2' : "Show current lists", 's' : "Show items in active list", 'a' : "Add an item to the active list", 'd' : "Remove an item from the active list", 'c' : "Delete the contents of the active list", 'n' : "Create a new list", 'r' : "Rename a list", 'x' : "Delete an entire list", 'q' : "Quit", } for key, value in menu.items(): print(f"\t'{key}' : {value}") prompt = input("\nPlease enter your choice: ") try: prompt in menu.keys() except: print("Please enter a valid command!") else: if prompt == '1': self.change_active_list() elif prompt == '2': self._show_lists_by_number() elif prompt == 's': self._print_current_list() elif prompt == 'a': self.control.add_item_to_list() elif prompt == 'd': self.control.remove_item_from_list() elif prompt == 'n': self.control.add_new_list() elif prompt == 'r': self.control.rename_list() elif prompt == 'c': self.control.clear_list() elif prompt == 'x': self.control.delete_list() elif prompt == 'q': self.settings.save_to_file() print("Your changes have been saved for the next time you come back!") break else: print("Please enter a valid command!")
def handle_event(self, event): super().handle_event(event) if type(event) == ServerConnected: print('server connect!') self._client = event.client self._client.subscribe(ALARM_REPLY_TOPIC_SUBSCRIBE) elif type(event) == MessageReceived: if event.msg.topic == ALARM_TOPIC_ROOT + 'list_alarm/reply': if self._holder is not None: payload = event.msg.payload.decode('UTF-8') print('alarm list: ', payload) client_id, alarm_list_str = payload.split(':', 1) if client_id == self._holder.client_id: self._alarm_list = alarm_list_str.split(',') self._alarm_list_ctrl = ListControl(self._holder, self.title + '/'+ ALARM_LIST, self._alarm_list) # 子系统不在激活状态,不要弹出 layer! if self._holder.is_actived(self.title): self._holder.add_layer(self._alarm_list_ctrl) elif type(event) == ListItemSelected: if event.list_name == self.title: if event.item_index == 0: self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1) elif event.item_index == 1: hour_list = ['{:02d}:'.format(i) for i in range(24)] hour_ctrl = ListControl(self._holder, self.title + '/' + ALARM_ADD_HOUR_LIST, hour_list) self._holder.add_layer(hour_ctrl) elif event.item_index == 2: self._client.publish(ALARM_TOPIC_ROOT + 'stop', payload='', qos=1) elif event.list_name == self.title + '/'+ ALARM_LIST: alarm = self._alarm_list[event.item_index] if alarm == '': return alarm_opt_list = [] if len(alarm) > 5: self._current_alarm_enabled = False alarm_opt_list = ['启用', '删除'] else: self._current_alarm_enabled = True alarm_opt_list = ['停用', '删除'] self._current_alarm = alarm[:5] alarm_opt_ctrl = ListControl(self._holder, self.title + '/' + ALARM_OPT_LIST, alarm_opt_list) self._holder.add_layer(alarm_opt_ctrl) elif event.list_name == self.title + '/' + ALARM_ADD_HOUR_LIST: self._alarm_hour = event.item_index minute_list = ['{:02d}:{:02d}'.format(self._alarm_hour, i) for i in range(0, 60, 5)] minute_ctrl = ListControl(self._holder, self.title + '/' + ALARM_ADD_MINUTE_LIST, minute_list) self._holder.add_layer(minute_ctrl) elif event.list_name == self.title + '/' + ALARM_ADD_MINUTE_LIST: self._alarm_minute = event.item_index * 5 self._client.publish(ALARM_TOPIC_ROOT + 'add', payload='{:02d}:{:02d}'.format(self._alarm_hour, self._alarm_minute), qos=1) self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1) self._holder.add_event(PopLayer(2)) elif event.list_name == self.title + '/' + ALARM_OPT_LIST: if event.item_index == 0: if self._current_alarm_enabled: self._client.publish(ALARM_TOPIC_ROOT + 'disable', payload=self._current_alarm, qos=1) else: self._client.publish(ALARM_TOPIC_ROOT + 'enable', payload=self._current_alarm, qos=1) elif event.item_index == 1: self._client.publish(ALARM_TOPIC_ROOT + 'delete', payload=self._current_alarm, qos=1) self._holder.add_event(PopLayer(2)) # 如果 delete qos 为2,list_alarm qos为1,则list_alarm会在删除前返回, # 导致显示不正确。暂时都设置为 qos=1。 self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1) if type(event) == ListBack: if event.list_name == self.title: self._holder.add_event(PopLayer(1)) elif event.list_name == self.title + '/'+ ALARM_LIST: self._holder.add_event(PopLayer(1)) elif event.list_name == self.title + '/'+ ALARM_ADD_HOUR_LIST: self._holder.add_event(PopLayer(1)) elif event.list_name == self.title + '/'+ ALARM_ADD_MINUTE_LIST: self._holder.add_event(PopLayer(1)) elif event.list_name == self.title + '/'+ ALARM_OPT_LIST: self._holder.add_event(PopLayer(1))
def active(self, holder): super().active(holder) return ListControl(holder, self.title, ['闹铃列表', '添加闹铃', '停止闹铃'])