Pygame:列表显示在表面中被截断

Pygame: list shown truncated in a surface

因此,我正在尝试构建一个应用程序来显示有关系统的一些信息,使用 Pygame 以图形方式显示它们。我试图显示的信息之一是系统中 os 个进程 运行 的列表,以及它们的 pid、名称和 cpu 使用百分比。问题是,当我尝试在 pygame 表面上显示它时,它被截断了,就好像试图将整个列表写入屏幕中的一个点一样。当尝试使用计数器将列表扩展到屏幕 acros 时,它变成了一条对角线。有什么方法可以正确显示此列表?

(另外,考虑到它是一个巨大的列表,有没有人知道一种方法可以根据列表的长度将它分成不同的表面?)

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))

When trying to use counters to spread the list across the screen, it becomes a single diagonal line.

造成这个效果,是因为你在内部循环中增加了文本的垂直和水平位置。仅增加内循环中的水平位置。必须在外循环中增加垂直位置。在内部循环中,您必须遍历字典:

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