Profilo di Gaffiere

Nome Gaffiere
Indirizzo email n/a
Messaggi1
  • problema con funzione che acquisisce dati da tastiera
    Forum >> Programmazione Python >> GUI
    Ciao a tutti!
    Sono nuovo su questo forum e non so molto di informatica (sono autodidatta e studio Python da qualche mese).
    Sto creando questo post perchè ho un problema con una funzione che ho creato, utilizzando pygame, che dovrebbe creare una casella grafica in cui vengono riportati caratteri che l'utente digita sulla tastiera, ed è la seguente, che riporto interamente dato che non ho idea di dove possa essere l'errore.
    (Allego anche il file)

    def acquisisci_dato_alfabetico(sfondo, colore_testo, testo, grandezza_carattere, x_testo, y_testo, x_risposta, y_risposta, lunghezza_risposta, altezza_risposta):
        global X_SCHERMO, Y_SCHERMO
        colore_bordo= (0, 0, 0)
        running= True
        stringa= ""
        font= pygame.font.SysFont(None, grandezza_carattere)
        text_istr= font.render(testo, True, colore_testo)
        surfa.blit(text_istr, (x_testo, y_testo))
        font= pygame.font.SysFont(None, grandezza_carattere)
        premi_invio= font.render("Premi INVIO per confermare", True, colore_testo)
        surfa.blit(premi_invio, (X_SCHERMO//2 - 205, Y_SCHERMO - 150))
        pygame.draw.rect(surfa, colore_bordo, (x_risposta, y_risposta, lunghezza_risposta, altezza_risposta), 2) #disegna riquadro per rispondere
        text_risposta= font.render(stringa, True, colore_testo)
        surfa.blit(text_risposta, (x_risposta + 10, y_risposta + 10))
        pygame.display.flip()
    
        while running:
            car= ""
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                    running= False
                elif event.type==pygame.KEYDOWN:
                    tasto= pygame.key.get_pressed()
                    if tastoK a:
                        car= "A"
                    elif tastoK b:
                        car= "B"
                    elif tastoK c:
                        car= "C"
                    elif tastoK d:
                        car= "D"
                    elif tastoK e:
                        car= "E"
                    elif tastoK f:
                        car= "F"
                    elif tastoK g:
                        car= "G"
                    elif tastoK h:
                        car= "H"
                    elif tastoK i:
                        car= "I"
                    elif tastoK l:
                        car= "L"
                    elif tastoK m:
                        car= "M"
                    elif tastoK n:
                        car= "N"
                    elif tastoK o:
                        car= "O"
                    elif tastoK p:
                        car= "P"
                    elif tastoK q:
                        car= "Q"
                    elif tastoK r:
                        car= "R"
                    elif tastoK s:
                        car= "S"
                    elif tastoK t:
                        car= "T"
                    elif tastoK u:
                        car= "U"
                    elif tastoK v:
                        car= "V"
                    elif tastoK z:
                        car= "Z"
                    elif tastoK j:
                        car= "J"
                    elif tastoK k:
                        car= "K"
                    elif tastoK y:
                        car= "Y"
                    elif tastoK w:
                        car= "W"
                    elif tastoK x:
                        car= "X"
                    elif tastoK 0:
                        car= "0"
                    elif tastoK 1:
                        car= "1"
                    elif tastoK 2:
                        car= "2"
                    elif tastoK 3:
                        car= "3"
                    elif tastoK 4:
                        car= "4"
                    elif tastoK 5:
                        car= "5"
                    elif tastoK 6:
                        car= "6"
                    elif tastoK 7:
                        car= "7"
                    elif tastoK 8:
                        car= "8"
                    elif tastoK 9:
                        car= "9"
                    elif tastoK KP DIVIDE:
                        car= "/"                    
                    elif tastoK BACKSPACE:
                        car= "-1"
                    elif tastoK RETURN:
                        if stringa!="":
                            return stringa
                        car= "-2"
                    if car=="-1":
                        if len(stringa)>0:
                            stringa= stringa[:len(stringa)-1]
                    elif car!="-2":
                        stringa= stringa + car
                    #print(stringa)
                    surfa.fill((255, 255, 255)) 
                    text_istr= font.render(testo, True, colore_testo)
                    surfa.blit(text_istr, (x_testo, y_testo))
                    surfa.blit(premi_invio, (X_SCHERMO//2 - 205, Y_SCHERMO - 150))
                    pygame.draw.rect(surfa, colore_bordo, (x_risposta, y_risposta, lunghezza_risposta, altezza_risposta), 2) #disegna riquadro per rispondere
                    text_risposta= font.render(stringa, True, colore_testo)
                    surfa.blit(text_risposta, (x_risposta + 50, y_risposta + 25))
                    pygame.display.flip()
    
    



    Funziona tutto bene tranne per una cosa: pigiando due tasti con un brevissimo intervallo temporale, sullo schermo viene riporatato due volte il primo carattere.
    Ad esempio se schiaccio prima "1" e immediatamente schiaccio anche "2", la funzione scriverà "11" e non "12".
    Facendo con "calma" invece funziona correttamente.
    Mi sono inoltre accorto che questo succede solamente se il secondo pulsante che viene premuto "sta sotto" al primo all'interno del ciclo: se ad esempio premo "3" ed immediatamente dopo premo "2", tutto funziona correttamente e scrive "32".

    Non capisco proprio cosa ho sbagliato, qualcuno ha qualche consiglio?

    Grazie mille! Scusate per il linguaggio per nulla tecnico, spero di essere stato abbastanza chiaro!

    Stefano



    --- Ultima modifica di Gaffiere in data 2018-03-13 23:08:32 ---

    --- Ultima modifica di Gaffiere in data 2018-03-13 23:09:18 ---