2011-08-18 13 views
8

Ho appena iniziato a imparare Python e sto scrivendo la mia funzione di completamento di tabulazioni per la pratica/il divertimento (quindi nessuno mi dice di compilare il programma). Sto avendo qualche problema a ottenere effettivamente il pitone per chiamare la funzione però. Il mio codice:Python: associare una funzione a un tasto

import readline 
def tab_completer(): 
    print readline.get_line_buffer() 

readline.parse_and_bind("tab: tab_completer") 
while True: 
    raw_input("Prompt") 

il risultato atteso è che quando ho colpito il tasto tab sarebbe stampare quello che mai avevo digitato, come mai questo non è ciò che sta realmente accadendo, qualche consiglio?

+0

È necessario specificare cosa sta effettivamente accadendo. –

+0

Non succede nulla, qualcosa è legato al pulsante tab (perché non è più tab), ma non esegue la funzione. Accade solo che sento rumore come se avessi premuto una chiave non valida. – Trcx

risposta

2

Prova questo:

import readline 

def tab_completer(text, state): 
    print "\ntext:", text 

readline.parse_and_bind("tab: complete") 
readline.set_completer(tab_completer) 
raw_input('Prompt: ') 

La domanda Tab completion in Python's raw_input() (che è stato il mio riferimento) può anche aiutare.

+0

Ci proverò in un minuto. – Trcx

+0

Che ha funzionato perfettamente! Grazie. Solo una domanda, perché è necessario utilizzare la linea readline.set_completer (tab_completer)? Ho pensato che la sintassi di parse_and_bind fosse ": " – Trcx

+1

Sto supponendo: credo che è il nome del tasto premuto, e è la routine di readline GNU. La riga parse_and_bind() ordina alla GNU readline di chiamare la propria routine "completa" quando viene premuto il tasto TAB. La riga set_completer specifica la routine Python richiamata da quella routine completa. Vedi il TAB: completa la riga in questo file di init readline http://www.gnu.org/s/bash/manual/html_node/Sample-Init-File.html#Sample-Init-File per la prova che ": La sintassi "è specifica per la lettura GNU. –

Problemi correlati