ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解决时间显示与其他内容显示切换的问题

2022-03-19 21:03:03  阅读:183  来源: 互联网

标签:map 显示 string show self recipe mode 解决 切换


解决时间显示与其他内容显示切换的问题

对于时间来说可以写一个线程单独运行每一秒给显示终端推送当前的时间就好了,但是如果这个时候要显示别的内容该如何解决呢。

这里采取了有限自动机的思路

IMG_DCB5C43CBCFA-1

这样就可以在系统内维护一个有限自动机,然后通过对于当前状态的判断显示正确的内容。

class ShowSys:
    def __init__(self):
        # 0 for time mode 1 for recipe mode
        # 自动机设计
        self.mode = 0
        self.mode2index = {'time_s': 0, 'recipe_s': 1, 'clear_s': 2}
        self.index2mode = {0: 'time_s', 1: 'recipe_s', 2: 'clear_s'}
        self.update_map = [{'recipe': 'recipe_s'}, {'clear': 'clear_s'}, {'recipe': 'recipe_s', 'time': 'time_s'}]
        self.string_map = {}
        for item in self.mode2index:
            self.string_map.update({item: ''})
        self.show_driver = ShowDriver()
        self.timer = Timer(self)
        self.handler = partial(ShowHandler, self)
        server_address = ('', 9999)
        self.httpd = HTTPServer(server_address, self.handler)
        self.httpd_thread = HTTPServerThread(self.httpd)

    def run(self):
        self.httpd_thread.start()
        self.timer.start()

    def show(self):
        cur_state = self.index2mode.get(self.mode)
        show_string = self.string_map.get(cur_state)
        self.show_driver.show(show_string)

    def deal_message(self, me_type, string):
        self.update_string_map(me_type, string)
        self.change_mode(me_type)
        self.show()

    def action_to_situation(self, action):
        return action + '_s'

    def update_string_map(self, me_type, string):
        self.string_map.update({self.action_to_situation(me_type): string})

    def change_mode(self, action):
        future_state = self.update_map[self.mode].get(action)
        if future_state:
            self.mode = self.mode2index.get(future_state)

标签:map,显示,string,show,self,recipe,mode,解决,切换
来源: https://blog.csdn.net/Godhui_/article/details/123602549

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有