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()
评论列表
文章目录