pygame:列表显示在表面被截断

问题描述

因此,我正在尝试构建一个应用程序,该应用程序使用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