widgets.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:vpn-fetch 作者: Flynston 项目源码 文件源码
def set_list(self, node):
        self.win.erase()
        highlighted = node.highlighted

        if not node.item_list:
            no_data_str = "no VPN data"
            self.win.addstr(self.height//2,(self.width-len(no_data_str))//2,
                                no_data_str)
            self.win.refresh()
            return

        list_len = len(node.item_list)
        half_win_height = self.height//2

        if highlighted < half_win_height or list_len < self.height:
            left = 0
            right = min(list_len, self.height)
        elif highlighted + half_win_height < list_len:
            left = highlighted - half_win_height
            right = highlighted + half_win_height
        else:
            left = list_len - self.height
            right = min(highlighted + half_win_height, list_len)        

        for index in range(left, right):
            try:
                item = node.item_list[index]
            except IndexError:
                self.win.addstr("Index out of range!")
                break
            text_atr = curses.A_REVERSE if index == highlighted else curses.A_NORMAL
            left_str = str(item[0])
            if isinstance(item[1], int):
                right_str = str(item[1])
            else:
                right_str = "{:.2f}".format(item[1])

            left_str = left_str if len(left_str)+len(right_str) < self.width else left_str[:self.width-len(right_str)-3]+'~'
            left_str = left_str.ljust(self.width-len(right_str)-1)  
            item_str = "{}{}".format(left_str, right_str) 
            self.win.addstr(index-left, 0, item_str, text_atr)

        self.win.refresh()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号