问题描述
因此,我正在尝试构建一个应用程序,该应用程序使用Pygame以图形方式显示有关系统的一些信息。我要显示的信息之一是系统中正在运行的OS进程的列表,包括其pid,名称和cpu使用率。问题是,当我尝试将其显示在pygame曲面上时,它会被截断,就像试图将整个列表写入屏幕中的单个点一样。当尝试使用计数器在屏幕上分布列表时,它变成一条对角线。有什么办法可以正确显示此列表?
(而且,考虑到这是一个庞大的列表,有人还会知道一种根据列表的长度将其分成不同表面的方法吗?)
def processos_ativos():
listofProcessNames = []
for proc in psutil.process_iter():
pInfoDict = proc.as_dict(attrs=['pid','name','cpu_percent'])
listofProcessNames.append(pInfoDict)
for elem in listofProcessNames:
#print(elem)
elem = str(elem)
horizontal = 0
vertical = 0
for i in elem:
text = font.render(i,1,verde)
horizontal += 1
vertical += 1
tela.blit(text,(10*vertical,25*horizontal))
解决方法
当尝试使用计数器在屏幕上分布列表时,它将变成一条对角线。
之所以引起这种效果,是因为您在内部循环中增加了文本的垂直和水平位置。仅在内部循环中增加水平位置。垂直位置必须在外循环中增加。在内部循环中,您必须遍历字典:
def processos_ativos():
listOfProcessNames = [proc.as_dict(attrs=['pid','name','cpu_percent']) for proc in psutil.process_iter()]
horizontal = 0
for dictionary in listOfProcessNames:
vertical = 0
for key in dictionary:
elem = dictionary[key]
text = font.render(elem,True,verde)
tela.blit(text,(10*vertical,25*horizontal))
vertical += 1
horizontal += 1