jdf / processing-py-site

Site for processing.py.
MIT License
197 stars 52 forks source link

Exit() function don't work in python mode #222

Open BeavesBSB opened 1 month ago

BeavesBSB commented 1 month ago

Hi,

I'm create this code in processing python mode (Processing 4.3), but when key tab is pressed the window don't close. I tried in Debian 12 and Windows 11.

Follow the code:

`segmentos=[

a,b,c,d,e,f,g

       [1,1,1,1,1,1,0], #0
       [0,1,1,0,0,0,0], #1
       [1,1,0,1,1,0,1], #2
       [1,1,1,1,0,0,1], #3
       [0,1,1,0,0,1,1], #4
       [1,0,1,1,0,1,1], #5
       [1,0,1,1,1,1,1], #6
       [1,1,1,0,0,0,0], #7
       [1,1,1,1,1,1,1], #8
       [1,1,1,1,0,1,1], #9
       ]

c = 96 # Comprimento l = 24 # Largura m = 48 # Meio x = 340 y = 160 numeroStr = ''

Variáveis para o cálculo da média

amostra="" list_amostra=[] soma=0 media=0 xm=780 ym=460 lm=2l/4 cm=2c/4 mm=2*m/4 med=[0,0,0,0]

Variáveis para mostra a quantidade palpites

xp=170 yp=460

def setup(): fullScreen()

surface.setUndecorated(True)

smooth()
noStroke()
background(0)
textSize(70)

def draw(): global media, soma, list_amostra background(0) fill(255)

if list_amostra:
    media = float(soma) / len(list_amostra)
else:
    media = 0
text("Media", 860, 630)
text("Palpites", 220,630) 
fill(255,0,0)
if numeroStr:
    displayNumber(numeroStr,x,y,c,l,m)
drawMedia(int(media),xm,ym,cm,lm,mm)
drawPalpites(list_amostra, xp, yp, cm, lm, mm)

def displayNumber(num_str, x, y, c,l,m):

num_str=num_str.zfill(4)
for i, digit in enumerate(num_str):
    drawDigito(segmentos[int(digit)],x+164*i,y,c,l,m) 

def displayPalpites(num_str, x, y, c,l,m): num_str=num_str.zfill(4) for i, digit in enumerate(num_str): drawDigito(segmentos[int(digit)],x+96*i,y,c,l,m)

def drawDigito(digito,x,y,c,l,m):

Segmento "a"

if digito[0] == 1:
    beginShape()
    vertex(x+l/2,y) #vertice a
    vertex(x+3*l/2,y-l/2) #vertice b
    vertex(x+3*l/2+m,y-l/2) #vertice c
    vertex(x+l/2+c,y) #vertice d
    vertex(x+3*l/2+m,y+l/2) #vertice e
    vertex(x+3*l/2,y+l/2) #vertice f
    endShape()

    #Segmento b
if digito[1] == 1:
    beginShape()
    vertex(x+c+l,y) #vértice a
    vertex(x+3*l/2+c,y+l) #vertice b
    vertex(x+3*l/2+c,y+l+m) #vertice c
    vertex(x+c+l,y+c) #vertice d
    vertex(x+l/2+c,y+l+m) #vertice e
    vertex(x+l/2+c,y+l) #vertice f
    endShape()

#Segmento c
if digito[2] == 1:
    beginShape()
    vertex(x+c+l,y+c) #vértice a
    vertex(x+3*l/2+c,y+l+c) #vertice b
    vertex(x+3*l/2+c,y+l+m+c) #vertice c
    vertex(x+c+l,y+2*c) #vertice d
    vertex(x+l/2+c,y+l+m+c) #vertice e
    vertex(x+l/2+c,y+l+c) #vertice f
    endShape()

    #Segmento d
if digito[3] == 1:
    beginShape()
    vertex(x+l/2,y+2*c) #vertice a
    vertex(x+3*l/2,y-l/2+2*c) #vertice b
    vertex(x+3*l/2+m,y-l/2+2*c) #vertice c
    vertex(x+l/2+c,y+2*c) #vertice d
    vertex(x+3*l/2+m,y+l/2+2*c) #vertice e
    vertex(x+3*l/2,y+l/2+2*c) #vertice f
    endShape()

#Segmento e
if digito[4] == 1:
    beginShape()
    vertex(x,y+c) #vértice a
    vertex(x+l/2,y+l+c) #vertice b
    vertex(x+l/2,y+l+m+c) #vertice c
    vertex(x,y+2*c) #vertice d
    vertex(x-l/2,y+l+m+c) #vertice e
    vertex(x-l/2,y+l+c) #vertice f
    endShape()

#Segmento f
if digito[5] == 1:
    beginShape()
    vertex(x,y) #vértice a
    vertex(x+l/2,y+l) #vertice b
    vertex(x+l/2,y+l+m) #vertice c
    vertex(x,y+c) #vertice d
    vertex(x-l/2,y+l+m) #vertice e
    vertex(x-l/2,y+l) #vertice f
    endShape()

#Segmento g
if digito[6] == 1:
    beginShape()
    vertex(x+l/2,y+c) #vertice a
    vertex(x+3*l/2,y-l/2+c) #vertice b
    vertex(x+3*l/2+m,y-l/2+c) #vertice c
    vertex(x+l/2+c,y+c) #vertice d
    vertex(x+3*l/2+m,y+l/2+c) #vertice e
    vertex(x+3*l/2,y+l/2+c) #vertice f
    endShape()

def drawMedia(media, xm, ym, cm, lm, mm):

Atualização para colocar os dígitos da média na lista med

# Se a média for menor que 10, evitamos preencher med[0], med[1] e med[2] com zeros
if media < 10:
    med = [0, 0, 0, media]
elif media < 100:
    med = [0, 0, media // 10, media % 10]
elif media < 1000:
    med = [0, media // 100, (media // 10) % 10, media % 10]
else:
    med = [media // 1000, (media % 1000) // 100, ((media % 1000) % 100) // 10, ((media % 1000) % 100) % 10]

first_non_zero_found = False  # Variável de controle para saber se o primeiro dígito não-zero foi encontrado
for i, val in enumerate(med):
    # Não desenha zeros mais significativos (à esquerda)
    if val != 0:
        first_non_zero_found = True
    # Desenha os dígitos zero após encontrar o primeiro dígito não-zero
    if val != 0 or (val == 0 and first_non_zero_found):
        x_pos = xm + i * 96
        drawDigito(segmentos[val], x_pos, ym, cm, lm, mm)

def drawPalpites(list_amostra, xp, yp, cm, lm, mm): sample_count = len(list_amostra) # A contagem de amostras é o comprimento da lista sample_str = str(sample_count).zfill(3) # Convertendo a contagem para uma string displayPalpites(sample_str, xp, yp, cm, lm, mm)

def keyPressed(): global numeroStr, soma, list_amostra if key >= '0' and key <= '9' and len(numeroStr) < 4: numeroStr += key elif key == ENTER or key == RETURN: if numeroStr:
valor = int(numeroStr)
list_amostra.append(valor)
soma += valor
with open('amostra.txt', 'a') as output: output.write(numeroStr + '\n')

Limpar numeroStr para nova entrada após salvar

        numeroStr = ""
elif key == BACKSPACE:
    numeroStr = numeroStr[:-1]
elif key == TAB:
    exit() `

Tanks