Pygame: 适应屏幕宽度和高度
Pygame: fit data into screen width and height
我正在尝试构建一个客户端-服务器应用程序,其中客户端从服务器请求一些关于文件、目录、网络等的信息。问题是,当我尝试加载文件和目录的名称以及它们的相关信息时,出现以下错误:
texto1 = font.render(''+str(files_info), True, verde, preto)
pygame.error: Width or height is too large
这并不奇怪,因为我正在一个非常拥挤的文件夹中测试这个应用程序。我还必须加载 PID 列表及其名称和 CPU 用法,它们很长。我的问题是:如何使大量信息适合 Pygame 屏幕?考虑过可能使用多个表面来执行此操作,例如尝试创建一个“下一步”按钮,但我不知道该怎么做。
服务器端:
import socket, psutil, pickle, os, time, datetime, cpuinfo
def mostra_uso_cpu_e_ram(socket_cliente):
info1 =('Usuario solicitou Informações de uso de processamento e Memória')
resposta = []
cpu = ('Porcentagem: ',psutil.cpu_percent())
resposta.append(cpu)
resposta.append(cpuinfo.get_cpu_info()['brand'])
resposta.append(cpuinfo.get_cpu_info()['arch'])
resposta.append(cpuinfo.get_cpu_info()['bits'])
resposta.append(cpuinfo.get_cpu_info()['hz_actual'])
resposta.append(psutil.cpu_freq()[0])
resposta.append(psutil.disk_usage('/')[3])
mem = psutil.virtual_memory()
mem_percent = mem.used/mem.total
resposta.append(mem_percent)
bytes_resp = pickle.dumps(resposta)
socket_cliente.send(bytes_resp)
print(info1)
def arquivos_diretorios(socket_cliente):
info2 = ('\nUsuario solicitou Informações sobre arquivos e diretórios')
info2 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE DIRETÓRIOS E ARQUIVOS\n')
socket_cliente.send(info2.encode('utf-8'))
lista_send = []
caminho = os.getcwd()
lista_send.append(caminho)
caminho = pickle.dumps(lista_send)
socket_cliente.send(caminho)
lista_arquivos = []
for a in os.listdir("."):
if os.path.isdir(a):
pathname = 'd %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = os.path.getsize(a)
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do diretório em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
elif os.path.isfile(a):
pathname = '- %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = statinfo.st_size
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do arquivo em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
arq_dir = pickle.dumps(lista_arquivos)
socket_cliente.send(arq_dir)
def processos_ativos(socket_cliente):
info3 = ('\nUsuario solicitou Informações sobre processos ativos')
info3 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE PROCESSOS EM ANDAMENTO\n')
info3 += ('\n\n*** Lista de processos em andamento no servidor ***\n\n')
socket_cliente.send(info3.encode('utf-8'))
listOfProcessNames = []
for proc in psutil.process_iter():
pInfoDict = proc.as_dict(attrs=['pid', 'name', 'cpu_percent'])
listOfProcessNames.append(pInfoDict)
proc_info = pickle.dumps(listOfProcessNames)
socket_cliente.send(proc_info)
socket_servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
porta = 9999
socket_servidor.bind((host, porta))
socket_servidor.listen()
print("Servidor", host, "esperando conexão na porta", porta)
(socket_cliente,addr) = socket_servidor.accept()
print("Conectado a:", str(addr))
while True:
mostra_uso_cpu_e_ram(socket_cliente)
arquivos_diretorios(socket_cliente)
processos_ativos(socket_cliente)
客户端:
import socket, time, pickle
import pygame
def imprime(l):
texto = ''
for i in l:
texto = texto + '\n' + '{:>20}'.format(i)
#print(texto)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 9999))
bytes_resp = s.recv(1024)
lista = pickle.loads(bytes_resp)
info2 = s.recv(4000)
caminho = s.recv(4000)
arq_dir = s.recv(100000)
files_info = pickle.loads(arq_dir)
info3 = s.recv(4000)
proc_info = s.recv(100000)
processos = pickle.loads(proc_info)
def display_slide():
tela1 = True
while tela1:
tela.fill([0, 0, 0])
texto1 = font.render('MENU', True, verde, preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[200,25]
tela.blit(texto1, textoRect1)
textoc = font.render('1 - CPU and Memory ', True, verde, preto)
textoRectc = textoc.get_rect()
textoRectc.topleft=[10,100]
tela.blit(textoc, textoRectc)
texto2 = font.render('2 - Files and Directories ', True, verde, preto)
textoRect2 = texto2.get_rect()
textoRect2.topleft=[10,150]
tela.blit(texto2, textoRect2)
texto3 = font.render('3 - Processes: ', True, verde, preto)
textoRect3 = texto3.get_rect()
textoRect3.topleft=[10,200]
tela.blit(texto3, textoRect3)
texto4 = font.render('4 - Network ', True, verde, preto)
textoRect4 = texto4.get_rect()
textoRect4.topleft=[10,250]
tela.blit(texto4, textoRect4)
texto5 = font.render('5 - Exit ', True, verde, preto)
textoRect5 = texto5.get_rect()
textoRect5.topleft=[10,300]
tela.blit(texto5, textoRect5)
texto6 = font.render('Select one of the options above or press arrow right ', True, verde, preto)
textoRect6 = texto6.get_rect()
textoRect6.topleft=[10,350]
tela.blit(texto6, textoRect6)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
tela1 = False
tela2 = True
else:
if event.key == pygame.K_1:
tela1 = False
tela2 = True
while tela2:
tela.fill([0, 0, 0])
titulo = font.render('CPU and Memory Usage: ', True, verde, preto)
textoRect0 = titulo.get_rect()
textoRect0.topleft=[300,10]
tela.blit(titulo, textoRect0)
texto1 = font.render(''+str(lista), True, verde, preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[10,30]
tela.blit(texto1, textoRect1)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = False
tela1 = True
elif event.key == pygame.K_RIGHT:
tela2 = False
tela3 = True
while tela3:
tela.fill([0, 0, 0])
texto = font.render('Files and Directories: ', True, verde, preto)
textoRect = texto.get_rect()
textoRect.topleft=[10,5]
tela.blit(texto, textoRect)
texto2 = font.render(''+str(files_info), True, verde, preto)
textoRect2 = texto2.get_rect()
textoRect2.topleft=[10,95]
tela.blit(texto2, textoRect2)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = True
tela3 = False
pygame.init()
largura_tela = 800
altura_tela = 800
tela = pygame.display.set_mode((largura_tela, altura_tela))
background = pygame.Surface(tela.get_size())
tela.blit(background, (0,0))
pygame.display.set_caption('Monitoramento e Análise do Sistema')
tela.fill([0, 0, 0])
verde = (0, 255, 0)
preto = (0, 0, 0)
cinza = (128, 128, 128, 255)
font = pygame.font.Font(None, 24)
terminou = False
while not terminou:
display_slide()
pygame.display.update()
pygame.display.quit()
pygame.quit()
需要呈现的大量文本之一的示例(并且 pygame 由于某种原因将其转换为元组)
['- Port.py', 'Data de Criação: 2020-07-30 22:15:18.937129', 'Data do Acesso mais recente: 2020-09-07 23:23:54.694304', 'Data da última modificação: 2020-07-30 22:15:18.937129', 'Tamanho do arquivo em bytes: 451', '- TP06_AnaCarolina_MeloPereira.py', 'Data de Criação: 2020-09-07 16:09:31.861902', 'Data do Acesso mais recente: 2020-09-07 16:09:33.247105', 'Data da última modificação: 2020-09-07 16:09:31.861902', 'Tamanho do arquivo em bytes: 18679', '- TP06_AnaCarolina_MeloPereira.py.zip', 'Data de Criação: 2020-08-27 22:25:03.858477', 'Data do Acesso mais recente: 2020-08-27 22:25:03.857714', 'Data da última modificação: 2020-08-27 22:25:03.857647', 'Tamanho do arquivo em bytes: 3948', '- .DS_Store', 'Data de Criação: 2020-08-11 00:18:59.014230', 'Data do Acesso mais recente: 2020-08-11 00:18:59.014324', 'Data da última modificação: 2020-08-11 00:18:59.014230', 'Tamanho do arquivo em bytes: 10244', '- processesteste.py', 'Data de Criação: 2020-08-10 23:40:56.940639', 'Data do Acesso mais recente: 2020-09-01 21:45:05.290113', 'Data da última modificação: 2020-08-10 23:40:56.940639', 'Tamanho do arquivo em bytes: 1784', '- Teste.rtf', 'Data de Criação: 2020-07-28 22:44:07.852383', 'Data do Acesso mais recente: 2020-07-28 22:44:07.858401', 'Data da última modificação: 2020-06-22 21:05:49.444665', 'Tamanho do arquivo em bytes: 405', '- clienteteste.py', 'Data de Criação: 2020-09-08 19:45:04.342697', 'Data do Acesso mais recente: 2020-09-08 19:45:06.279300', 'Data da última modificação: 2020-09-08 19:45:04.342697', 'Tamanho do arquivo em bytes: 5586', 'd 02 - Arquitetura de Computadores, Sistemas Operacionais e Redes', 'Data de Criação: 2020-08-11 00:16:02.910568', 'Data do Acesso mais recente: 2020-08-11 00:16:04.645334', 'Data da última modificação: 2020-08-11 00:16:02.910568', 'Tamanho do diretório em bytes: 224', '- asdfghjkl.py', 'Data de Criação: 2020-08-26 23:16:08.074653', 'Data do Acesso mais recente: 2020-09-04 19:57:19.062760', 'Data da última modificação: 2020-08-26 23:16:08.074653', 'Tamanho do arquivo em bytes: 2248', '- seila.py', 'Data de Criação: 2020-08-10 23:40:59.082237', 'Data do Acesso mais recente: 2020-09-07 23:24:10.945553', 'Data da última modificação: 2020-08-10 23:40:59.082237', 'Tamanho do arquivo em bytes: 1369', '- .teste.rtf', 'Data de Criação: 2020-06-22 21:07:29.094099', 'Data do Acesso mais recente: 2020-06-22 21:07:29.094099', 'Data da última modificação: 2020-06-22 21:07:29.094099', 'Tamanho do arquivo em bytes: 0', '- servidorteste.py', 'Data de Criação: 2020-09-08 18:49:47.657584', 'Data do Acesso mais recente: 2020-09-08 18:49:49.351929', 'Data da última modificação: 2020-09-08 18:49:47.657584', 'Tamanho do arquivo em bytes: 6174', '- clientearquivo.py', 'Data de Criação: 2020-09-08 11:55:02.196598', 'Data do Acesso mais recente: 2020-09-08 11:55:04.356020', 'Data da última modificação: 2020-09-08 11:55:02.196598', 'Tamanho do arquivo em bytes: 11613', '- perproc.py', 'Data de Criação: 2020-08-17 22:07:22.857411', 'Data do Acesso mais recente: 2020-09-07 23:23:03.746201', 'Data da última modificação: 2020-08-17 22:07:22.857411', 'Tamanho do arquivo em bytes: 1070', '- servidorarquivo.py', 'Data de Criação: 2020-09-07 19:52:32.416164', 'Data do Acesso mais recente: 2020-09-07 19:52:34.320696', 'Data da última modificação: 2020-09-07 19:52:32.416164', 'Tamanho do arquivo em bytes: 6578', '- clienteTP09.py', 'Data de Criação: 2020-09-08 10:25:11.597179', 'Data do Acesso mais recente: 2020-09-08 10:25:13.191097', 'Data da última modificação: 2020-09-08 10:25:11.597179', 'Tamanho do arquivo em bytes: 2682', '- servidorTP09.py', 'Data de Criação: 2020-09-08 10:25:10.014792', 'Data do Acesso mais recente: 2020-09-08 10:25:11.691246', 'Data da última modificação: 2020-09-08 10:25:10.014792', 'Tamanho do arquivo em bytes: 9511', '- Teste2.py', 'Data de Criação: 2020-06-23 00:45:32.142930', 'Data do Acesso mais recente: 2020-07-28 22:30:01.126377', 'Data da última modificação: 2020-06-23 00:45:32.142930', 'Tamanho do arquivo em bytes: 1075', 'd 01 - Bloco de Entrada', 'Data de Criação: 2020-05-26 21:14:05.451512', 'Data do Acesso mais recente: 2020-05-26 21:14:06.713600', 'Data da última modificação: 2020-05-26 21:14:05.451512', 'Tamanho do diretório em bytes: 192', '- Teste.py', 'Data de Criação: 2020-06-22 21:58:07.500057', 'Data do Acesso mais recente: 2020-07-28 22:30:01.144316', 'Data da última modificação: 2020-06-22 21:58:07.500057', 'Tamanho do arquivo em bytes: 1330', '- servidor.py', 'Data de Criação: 2020-09-01 22:44:03.209760', 'Data do Acesso mais recente: 2020-09-01 22:44:03.211094', 'Data da última modificação: 2020-09-01 22:44:03.209760', 'Tamanho do arquivo em bytes: 857', '- Sera.py', 'Data de Criação: 2020-08-10 01:46:24.746689', 'Data do Acesso mais recente: 2020-09-07 23:24:01.534768', 'Data da última modificação: 2020-08-10 01:46:24.746689', 'Tamanho do arquivo em bytes: 2118', '- Socket.py', 'Data de Criação: 2020-08-04 15:52:59.223063', 'Data do Acesso mais recente: 2020-09-03 20:04:57.059565', 'Data da última modificação: 2020-08-04 15:52:59.223063', 'Tamanho do arquivo em bytes: 398', '- Prints.py', 'Data de Criação: 2020-06-23 19:51:50.521518', 'Data do Acesso mais recente: 2020-07-28 22:30:00.996539', 'Data da última modificação: 2020-06-23 19:51:50.521518', 'Tamanho do arquivo em bytes: 104', '- testearquivo.py', 'Data de Criação: 2020-09-06 22:49:58.351485', 'Data do Acesso mais recente: 2020-09-06 22:49:59.087386', 'Data da última modificação: 2020-09-06 22:49:58.351485', 'Tamanho do arquivo em bytes: 507', '- cliente.py', 'Data de Criação: 2020-09-01 23:17:40.626674', 'Data do Acesso mais recente: 2020-09-01 23:17:41.100185', 'Data da última modificação: 2020-09-01 23:17:40.626674', 'Tamanho do arquivo em bytes: 465']
可能您只需要稍微解析传入的数据来清理它。简单地以 5 的“步长”遍历列表就很容易了:
dir_list = ['- Port.py', 'Data de Criação: 2020-07-30 22:15:18.937129', 'Data do Acesso mais recente: 2020-09-07 23:23:54.694304', 'Data da última modificação: 2020-07-30 22:15:18.937129', 'Tamanho do arquivo em bytes: 451', '- TP06_AnaCarolina_MeloPereira.py', 'Data de Criação: 2020-09-07 16:09:31.861902', 'Data do Acesso mais recente: 2020-09-07 16:09:33.247105', 'Data da última modificação: 2020-09-07 16:09:31.861902', 'Tamanho do arquivo em bytes: 18679', '- TP06_AnaCarolina_MeloPereira.py.zip', 'Data de Criação: 2020-08-27 22:25:03.858477', 'Data do Acesso mais recente: 2020-08-27 22:25:03.857714', 'Data da última modificação: 2020-08-27 22:25:03.857647', 'Tamanho do arquivo em bytes: 3948', '- .DS_Store', 'Data de Criação: 2020-08-11 00:18:59.014230', 'Data do Acesso mais recente: 2020-08-11 00:18:59.014324', 'Data da última modificação: 2020-08-11 00:18:59.014230', 'Tamanho do arquivo em bytes: 10244' ]
print( "Filename Size Last MOdified" )
for i in range( 0, len( dir_list ), 5 ):
filename = dir_list[ i + 0 ].strip()
data_criação = dir_list[ i + 1 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_acesso = dir_list[ i + 2 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_modificação = dir_list[ i + 3 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
file_size = dir_list[ i + 4 ].split( ':', 1 )[1]
# limited processing
if ( filename.startswith( '- ' ) ):
filename = filename[ 2: ] # trim leading "- "
file_size = int( file_size )
print( "%-40s %6d %s" % ( filename, file_size, data_modificação ) )
这大大减少了数据的文本量,使其可以轻松绘制到 PyGame 表面上的列中。有很多 pygame 文本示例。
对我来说,上面的例子给出了:
[#] python3 ./file_show.py
Filename Size Last MOdified
Port.py 451 2020-07-30 22:15:18
TP06_AnaCarolina_MeloPereira.py 18679 2020-09-07 16:09:31
TP06_AnaCarolina_MeloPereira.py.zip 3948 2020-08-27 22:25:03
.DS_Store 10244 2020-08-11 00:18:59
我正在尝试构建一个客户端-服务器应用程序,其中客户端从服务器请求一些关于文件、目录、网络等的信息。问题是,当我尝试加载文件和目录的名称以及它们的相关信息时,出现以下错误:
texto1 = font.render(''+str(files_info), True, verde, preto)
pygame.error: Width or height is too large
这并不奇怪,因为我正在一个非常拥挤的文件夹中测试这个应用程序。我还必须加载 PID 列表及其名称和 CPU 用法,它们很长。我的问题是:如何使大量信息适合 Pygame 屏幕?考虑过可能使用多个表面来执行此操作,例如尝试创建一个“下一步”按钮,但我不知道该怎么做。
服务器端:
import socket, psutil, pickle, os, time, datetime, cpuinfo
def mostra_uso_cpu_e_ram(socket_cliente):
info1 =('Usuario solicitou Informações de uso de processamento e Memória')
resposta = []
cpu = ('Porcentagem: ',psutil.cpu_percent())
resposta.append(cpu)
resposta.append(cpuinfo.get_cpu_info()['brand'])
resposta.append(cpuinfo.get_cpu_info()['arch'])
resposta.append(cpuinfo.get_cpu_info()['bits'])
resposta.append(cpuinfo.get_cpu_info()['hz_actual'])
resposta.append(psutil.cpu_freq()[0])
resposta.append(psutil.disk_usage('/')[3])
mem = psutil.virtual_memory()
mem_percent = mem.used/mem.total
resposta.append(mem_percent)
bytes_resp = pickle.dumps(resposta)
socket_cliente.send(bytes_resp)
print(info1)
def arquivos_diretorios(socket_cliente):
info2 = ('\nUsuario solicitou Informações sobre arquivos e diretórios')
info2 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE DIRETÓRIOS E ARQUIVOS\n')
socket_cliente.send(info2.encode('utf-8'))
lista_send = []
caminho = os.getcwd()
lista_send.append(caminho)
caminho = pickle.dumps(lista_send)
socket_cliente.send(caminho)
lista_arquivos = []
for a in os.listdir("."):
if os.path.isdir(a):
pathname = 'd %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = os.path.getsize(a)
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do diretório em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
elif os.path.isfile(a):
pathname = '- %s' % a
lista_arquivos.append(pathname)
statinfo = os.stat(a)
data_criacao = datetime.datetime.fromtimestamp(statinfo.st_ctime)
data_acesso = datetime.datetime.fromtimestamp(statinfo.st_atime)
data_modificacao = datetime.datetime.fromtimestamp(statinfo.st_mtime)
size = statinfo.st_size
criacao = 'Data de Criação: {}'.format(data_criacao)
lista_arquivos.append(criacao)
acesso = 'Data do Acesso mais recente: {}'.format(data_acesso)
lista_arquivos.append(acesso)
modificacao = 'Data da última modificação: {}'.format(data_modificacao)
lista_arquivos.append(modificacao)
tamanho = 'Tamanho do arquivo em bytes: {}'.format(size)
lista_arquivos.append(tamanho)
arq_dir = pickle.dumps(lista_arquivos)
socket_cliente.send(arq_dir)
def processos_ativos(socket_cliente):
info3 = ('\nUsuario solicitou Informações sobre processos ativos')
info3 += ('\n\n-------------------------------------------------------\n\n INFORMAÇÕES SOBRE PROCESSOS EM ANDAMENTO\n')
info3 += ('\n\n*** Lista de processos em andamento no servidor ***\n\n')
socket_cliente.send(info3.encode('utf-8'))
listOfProcessNames = []
for proc in psutil.process_iter():
pInfoDict = proc.as_dict(attrs=['pid', 'name', 'cpu_percent'])
listOfProcessNames.append(pInfoDict)
proc_info = pickle.dumps(listOfProcessNames)
socket_cliente.send(proc_info)
socket_servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
porta = 9999
socket_servidor.bind((host, porta))
socket_servidor.listen()
print("Servidor", host, "esperando conexão na porta", porta)
(socket_cliente,addr) = socket_servidor.accept()
print("Conectado a:", str(addr))
while True:
mostra_uso_cpu_e_ram(socket_cliente)
arquivos_diretorios(socket_cliente)
processos_ativos(socket_cliente)
客户端:
import socket, time, pickle
import pygame
def imprime(l):
texto = ''
for i in l:
texto = texto + '\n' + '{:>20}'.format(i)
#print(texto)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 9999))
bytes_resp = s.recv(1024)
lista = pickle.loads(bytes_resp)
info2 = s.recv(4000)
caminho = s.recv(4000)
arq_dir = s.recv(100000)
files_info = pickle.loads(arq_dir)
info3 = s.recv(4000)
proc_info = s.recv(100000)
processos = pickle.loads(proc_info)
def display_slide():
tela1 = True
while tela1:
tela.fill([0, 0, 0])
texto1 = font.render('MENU', True, verde, preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[200,25]
tela.blit(texto1, textoRect1)
textoc = font.render('1 - CPU and Memory ', True, verde, preto)
textoRectc = textoc.get_rect()
textoRectc.topleft=[10,100]
tela.blit(textoc, textoRectc)
texto2 = font.render('2 - Files and Directories ', True, verde, preto)
textoRect2 = texto2.get_rect()
textoRect2.topleft=[10,150]
tela.blit(texto2, textoRect2)
texto3 = font.render('3 - Processes: ', True, verde, preto)
textoRect3 = texto3.get_rect()
textoRect3.topleft=[10,200]
tela.blit(texto3, textoRect3)
texto4 = font.render('4 - Network ', True, verde, preto)
textoRect4 = texto4.get_rect()
textoRect4.topleft=[10,250]
tela.blit(texto4, textoRect4)
texto5 = font.render('5 - Exit ', True, verde, preto)
textoRect5 = texto5.get_rect()
textoRect5.topleft=[10,300]
tela.blit(texto5, textoRect5)
texto6 = font.render('Select one of the options above or press arrow right ', True, verde, preto)
textoRect6 = texto6.get_rect()
textoRect6.topleft=[10,350]
tela.blit(texto6, textoRect6)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
tela1 = False
tela2 = True
else:
if event.key == pygame.K_1:
tela1 = False
tela2 = True
while tela2:
tela.fill([0, 0, 0])
titulo = font.render('CPU and Memory Usage: ', True, verde, preto)
textoRect0 = titulo.get_rect()
textoRect0.topleft=[300,10]
tela.blit(titulo, textoRect0)
texto1 = font.render(''+str(lista), True, verde, preto)
textoRect1 = texto1.get_rect()
textoRect1.topleft=[10,30]
tela.blit(texto1, textoRect1)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = False
tela1 = True
elif event.key == pygame.K_RIGHT:
tela2 = False
tela3 = True
while tela3:
tela.fill([0, 0, 0])
texto = font.render('Files and Directories: ', True, verde, preto)
textoRect = texto.get_rect()
textoRect.topleft=[10,5]
tela.blit(texto, textoRect)
texto2 = font.render(''+str(files_info), True, verde, preto)
textoRect2 = texto2.get_rect()
textoRect2.topleft=[10,95]
tela.blit(texto2, textoRect2)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tela2 = True
tela3 = False
pygame.init()
largura_tela = 800
altura_tela = 800
tela = pygame.display.set_mode((largura_tela, altura_tela))
background = pygame.Surface(tela.get_size())
tela.blit(background, (0,0))
pygame.display.set_caption('Monitoramento e Análise do Sistema')
tela.fill([0, 0, 0])
verde = (0, 255, 0)
preto = (0, 0, 0)
cinza = (128, 128, 128, 255)
font = pygame.font.Font(None, 24)
terminou = False
while not terminou:
display_slide()
pygame.display.update()
pygame.display.quit()
pygame.quit()
需要呈现的大量文本之一的示例(并且 pygame 由于某种原因将其转换为元组)
['- Port.py', 'Data de Criação: 2020-07-30 22:15:18.937129', 'Data do Acesso mais recente: 2020-09-07 23:23:54.694304', 'Data da última modificação: 2020-07-30 22:15:18.937129', 'Tamanho do arquivo em bytes: 451', '- TP06_AnaCarolina_MeloPereira.py', 'Data de Criação: 2020-09-07 16:09:31.861902', 'Data do Acesso mais recente: 2020-09-07 16:09:33.247105', 'Data da última modificação: 2020-09-07 16:09:31.861902', 'Tamanho do arquivo em bytes: 18679', '- TP06_AnaCarolina_MeloPereira.py.zip', 'Data de Criação: 2020-08-27 22:25:03.858477', 'Data do Acesso mais recente: 2020-08-27 22:25:03.857714', 'Data da última modificação: 2020-08-27 22:25:03.857647', 'Tamanho do arquivo em bytes: 3948', '- .DS_Store', 'Data de Criação: 2020-08-11 00:18:59.014230', 'Data do Acesso mais recente: 2020-08-11 00:18:59.014324', 'Data da última modificação: 2020-08-11 00:18:59.014230', 'Tamanho do arquivo em bytes: 10244', '- processesteste.py', 'Data de Criação: 2020-08-10 23:40:56.940639', 'Data do Acesso mais recente: 2020-09-01 21:45:05.290113', 'Data da última modificação: 2020-08-10 23:40:56.940639', 'Tamanho do arquivo em bytes: 1784', '- Teste.rtf', 'Data de Criação: 2020-07-28 22:44:07.852383', 'Data do Acesso mais recente: 2020-07-28 22:44:07.858401', 'Data da última modificação: 2020-06-22 21:05:49.444665', 'Tamanho do arquivo em bytes: 405', '- clienteteste.py', 'Data de Criação: 2020-09-08 19:45:04.342697', 'Data do Acesso mais recente: 2020-09-08 19:45:06.279300', 'Data da última modificação: 2020-09-08 19:45:04.342697', 'Tamanho do arquivo em bytes: 5586', 'd 02 - Arquitetura de Computadores, Sistemas Operacionais e Redes', 'Data de Criação: 2020-08-11 00:16:02.910568', 'Data do Acesso mais recente: 2020-08-11 00:16:04.645334', 'Data da última modificação: 2020-08-11 00:16:02.910568', 'Tamanho do diretório em bytes: 224', '- asdfghjkl.py', 'Data de Criação: 2020-08-26 23:16:08.074653', 'Data do Acesso mais recente: 2020-09-04 19:57:19.062760', 'Data da última modificação: 2020-08-26 23:16:08.074653', 'Tamanho do arquivo em bytes: 2248', '- seila.py', 'Data de Criação: 2020-08-10 23:40:59.082237', 'Data do Acesso mais recente: 2020-09-07 23:24:10.945553', 'Data da última modificação: 2020-08-10 23:40:59.082237', 'Tamanho do arquivo em bytes: 1369', '- .teste.rtf', 'Data de Criação: 2020-06-22 21:07:29.094099', 'Data do Acesso mais recente: 2020-06-22 21:07:29.094099', 'Data da última modificação: 2020-06-22 21:07:29.094099', 'Tamanho do arquivo em bytes: 0', '- servidorteste.py', 'Data de Criação: 2020-09-08 18:49:47.657584', 'Data do Acesso mais recente: 2020-09-08 18:49:49.351929', 'Data da última modificação: 2020-09-08 18:49:47.657584', 'Tamanho do arquivo em bytes: 6174', '- clientearquivo.py', 'Data de Criação: 2020-09-08 11:55:02.196598', 'Data do Acesso mais recente: 2020-09-08 11:55:04.356020', 'Data da última modificação: 2020-09-08 11:55:02.196598', 'Tamanho do arquivo em bytes: 11613', '- perproc.py', 'Data de Criação: 2020-08-17 22:07:22.857411', 'Data do Acesso mais recente: 2020-09-07 23:23:03.746201', 'Data da última modificação: 2020-08-17 22:07:22.857411', 'Tamanho do arquivo em bytes: 1070', '- servidorarquivo.py', 'Data de Criação: 2020-09-07 19:52:32.416164', 'Data do Acesso mais recente: 2020-09-07 19:52:34.320696', 'Data da última modificação: 2020-09-07 19:52:32.416164', 'Tamanho do arquivo em bytes: 6578', '- clienteTP09.py', 'Data de Criação: 2020-09-08 10:25:11.597179', 'Data do Acesso mais recente: 2020-09-08 10:25:13.191097', 'Data da última modificação: 2020-09-08 10:25:11.597179', 'Tamanho do arquivo em bytes: 2682', '- servidorTP09.py', 'Data de Criação: 2020-09-08 10:25:10.014792', 'Data do Acesso mais recente: 2020-09-08 10:25:11.691246', 'Data da última modificação: 2020-09-08 10:25:10.014792', 'Tamanho do arquivo em bytes: 9511', '- Teste2.py', 'Data de Criação: 2020-06-23 00:45:32.142930', 'Data do Acesso mais recente: 2020-07-28 22:30:01.126377', 'Data da última modificação: 2020-06-23 00:45:32.142930', 'Tamanho do arquivo em bytes: 1075', 'd 01 - Bloco de Entrada', 'Data de Criação: 2020-05-26 21:14:05.451512', 'Data do Acesso mais recente: 2020-05-26 21:14:06.713600', 'Data da última modificação: 2020-05-26 21:14:05.451512', 'Tamanho do diretório em bytes: 192', '- Teste.py', 'Data de Criação: 2020-06-22 21:58:07.500057', 'Data do Acesso mais recente: 2020-07-28 22:30:01.144316', 'Data da última modificação: 2020-06-22 21:58:07.500057', 'Tamanho do arquivo em bytes: 1330', '- servidor.py', 'Data de Criação: 2020-09-01 22:44:03.209760', 'Data do Acesso mais recente: 2020-09-01 22:44:03.211094', 'Data da última modificação: 2020-09-01 22:44:03.209760', 'Tamanho do arquivo em bytes: 857', '- Sera.py', 'Data de Criação: 2020-08-10 01:46:24.746689', 'Data do Acesso mais recente: 2020-09-07 23:24:01.534768', 'Data da última modificação: 2020-08-10 01:46:24.746689', 'Tamanho do arquivo em bytes: 2118', '- Socket.py', 'Data de Criação: 2020-08-04 15:52:59.223063', 'Data do Acesso mais recente: 2020-09-03 20:04:57.059565', 'Data da última modificação: 2020-08-04 15:52:59.223063', 'Tamanho do arquivo em bytes: 398', '- Prints.py', 'Data de Criação: 2020-06-23 19:51:50.521518', 'Data do Acesso mais recente: 2020-07-28 22:30:00.996539', 'Data da última modificação: 2020-06-23 19:51:50.521518', 'Tamanho do arquivo em bytes: 104', '- testearquivo.py', 'Data de Criação: 2020-09-06 22:49:58.351485', 'Data do Acesso mais recente: 2020-09-06 22:49:59.087386', 'Data da última modificação: 2020-09-06 22:49:58.351485', 'Tamanho do arquivo em bytes: 507', '- cliente.py', 'Data de Criação: 2020-09-01 23:17:40.626674', 'Data do Acesso mais recente: 2020-09-01 23:17:41.100185', 'Data da última modificação: 2020-09-01 23:17:40.626674', 'Tamanho do arquivo em bytes: 465']
可能您只需要稍微解析传入的数据来清理它。简单地以 5 的“步长”遍历列表就很容易了:
dir_list = ['- Port.py', 'Data de Criação: 2020-07-30 22:15:18.937129', 'Data do Acesso mais recente: 2020-09-07 23:23:54.694304', 'Data da última modificação: 2020-07-30 22:15:18.937129', 'Tamanho do arquivo em bytes: 451', '- TP06_AnaCarolina_MeloPereira.py', 'Data de Criação: 2020-09-07 16:09:31.861902', 'Data do Acesso mais recente: 2020-09-07 16:09:33.247105', 'Data da última modificação: 2020-09-07 16:09:31.861902', 'Tamanho do arquivo em bytes: 18679', '- TP06_AnaCarolina_MeloPereira.py.zip', 'Data de Criação: 2020-08-27 22:25:03.858477', 'Data do Acesso mais recente: 2020-08-27 22:25:03.857714', 'Data da última modificação: 2020-08-27 22:25:03.857647', 'Tamanho do arquivo em bytes: 3948', '- .DS_Store', 'Data de Criação: 2020-08-11 00:18:59.014230', 'Data do Acesso mais recente: 2020-08-11 00:18:59.014324', 'Data da última modificação: 2020-08-11 00:18:59.014230', 'Tamanho do arquivo em bytes: 10244' ]
print( "Filename Size Last MOdified" )
for i in range( 0, len( dir_list ), 5 ):
filename = dir_list[ i + 0 ].strip()
data_criação = dir_list[ i + 1 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_acesso = dir_list[ i + 2 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
data_modificação = dir_list[ i + 3 ].split( ':', 1 )[1].strip()[ 0:19 ] # convert to YYYY-MM-DD HH:MM:SS
file_size = dir_list[ i + 4 ].split( ':', 1 )[1]
# limited processing
if ( filename.startswith( '- ' ) ):
filename = filename[ 2: ] # trim leading "- "
file_size = int( file_size )
print( "%-40s %6d %s" % ( filename, file_size, data_modificação ) )
这大大减少了数据的文本量,使其可以轻松绘制到 PyGame 表面上的列中。有很多 pygame 文本示例。
对我来说,上面的例子给出了:
[#] python3 ./file_show.py
Filename Size Last MOdified
Port.py 451 2020-07-30 22:15:18
TP06_AnaCarolina_MeloPereira.py 18679 2020-09-07 16:09:31
TP06_AnaCarolina_MeloPereira.py.zip 3948 2020-08-27 22:25:03
.DS_Store 10244 2020-08-11 00:18:59