2012-02-17 7 views
7

Ogni volta che provo quanto segue nel mio interprete python. Sono in grado di copiare la parola ciao alla riga di comando, anche dopo che chiudo l'interpreteImpossibile aggiungere agli appunti

from Tkinter import Tk 
r = Tk() 
r.clipboard_append(" hello ") 

Tuttavia, se ho messo questo in un file chiamato test.py e quindi provare

python test.py 

Questo non funziona, non posso aggiungere questo negli appunti di sistema

Se uno sa o perché non sa che differenza tra l'esecuzione in uno script e nell'interprete causerebbe

+0

Se stai lasciando aperto l'interprete è solo per quello (per il primo caso). Una volta che python gira e si ripulisce, cancellerà ciò che è negli appunti. – dennmat

+0

Come specificato nella domanda, chiudo l'interprete e lo copia ancora negli appunti. – samirahmed

+1

Manca quella parte, comunque dovresti chiamare comunque clipboard_clear per assicurarti che non ci sia nulla di sporco lì dentro. Tuttavia non sono sicuro del perché sarebbe diverso tra i due in quanto sono esattamente la stessa cosa. Spero che qualcuno abbia la risposta per te. – dennmat

risposta

4

Apparentemente non funzionerà fino a quando Tkinter non sarà nel mainloop. Questo funziona sul mio sistema:

from Tkinter import * 
r = Tk() 
r.clipboard_append("hello") 
r.mainloop() 
+2

'r.update()' anche sufficiente, se non si desidera un mainloop. –

+0

E se non volessi un mainloop? Voglio che il mio programma termini dopo questo. 'r.update()' non aiuta. usare un timeout come soluzione alternativa (vedi sotto) funziona – Blauhirn

2

vedo questa differenza di comportamento troppo. La soluzione tkinter suggerita per posizionare il testo negli appunti funziona bene tramite la riga di comando, ma lascia gli appunti vuoti quando viene utilizzato in un programma. L'uso di mainloop() alla fine del programma funziona ma significa che il programma non si esaurirà e l'uso di r.update() non sembra essere d'aiuto.

Nota: se gli appunti vengono incollati su un'altra applicazione prima che il programma termini (bloccando il programma alla fine in attesa di input dell'utente), la soluzione tkinter funziona correttamente anche dopo la fine del programma. Ma se il programma termina prima che gli appunti vengano incollati su un altro programma, gli appunti finiscono per essere vuoti.

1

Come deel, la suggestione di Patrick T Neslon e gli altri a utilizzare:

from Tkinter import * 
r = Tk() 
r.clipboard_append("hello") 
r.mainloop() 

non ha funzionato in un'applicazione non-gui (aggiornamento non funzionavano) (Win 7/64, Python 2.7.10/32). Questo funziona anche se sembra essere un hack, ispirato https://bugs.python.org/issue23760:

from Tkinter import * 
r = Tk() 
r.clipboard_clear() 
r.clipboard_append("hello") 
r.after(500, tk.destroy) 
r.mainloop() 

100 ms di solito hanno lavorato sul mio sistema quindi siamo andati con 500. Questo per un programma di utilità che userò, non qualcosa che vorrei distribuire molto ampiamente a meno che qualcuno con molta più esperienza dice che è affidabile ...