2012-02-17 20 views
7

Cada vez que intento lo siguiente en mi intérprete de Python. Soy capaz de copiar la palabra hola a la línea de comandos, incluso después de cerrar el intérpreteNo se puede agregar al portapapeles

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

Sin embargo si pongo esto en un archivo llamado test.py y luego tratar

python test.py 

Este no va a funcionar, no puedo añadir esto al portapapeles del sistema

¿Alguien sabe por qué no o saber qué diferencia entre correr en un guión y en el intérprete causaría

+0

Si deja abierto el intérprete, se debe a eso (para el primer caso). Una vez que Python se ejecuta y se limpia, borrará lo que hay en el portapapeles. – dennmat

+0

Como especifiqué en la pregunta, cierro el intérprete y todavía lo copia en el portapapeles. – samirahmed

+1

Perdió esa parte, sin embargo, primero debe llamar al portapapeles_clave para asegurarse de que no haya nada sucio allí. Sin embargo, no estoy seguro de por qué sería diferente entre los dos, ya que realmente son exactamente lo mismo. Espero que alguien tenga la respuesta para ti. – dennmat

Respuesta

4

Aparentemente no funcionará hasta que Tkinter se encuentre en su mainloop. Esto funciona en mi sistema:

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

'r.update()' también es suficiente, si no desea un mainloop. –

+0

¿Qué sucede si no quiero un mainloop? Quiero que mi programa termine después de esto. 'r.update()' no ayuda. utilizar un tiempo de espera como solución alternativa (ver a continuación) funciona – Blauhirn

2

Veo esta diferencia en el comportamiento también. La solución de tkinter sugerida para colocar texto en el portapapeles funciona bien a través de la línea de comando, pero deja el portapapeles vacío cuando se usa en un programa. El uso de mainloop() al final del programa funciona pero significa que el programa no finalizará, y el uso de r.update() no parece ayudar.

Nota: Si el portapapeles se pega a otra aplicación antes de que termine el programa (haciendo que el programa cuelgue al final esperando la entrada del usuario), la solución tkinter funciona bien, incluso después de que finaliza el programa. Pero si el programa finaliza antes de que el portapapeles se pegue en otro programa, el portapapeles termina siendo vacío.

1

Como deel, la sugerencia de Patrick T Neslon y otros de uso:

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

no funcionó en una aplicación no-GUI (actualización no funcionaba) (Win 7/64, Python 2.7.10/32). Esto funciona a pesar de que parece ser un truco, inspirado por 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 habitualmente trabajadas en mi sistema, así que fuimos con 500. Esto para una utilidad que me va a utilizar, no es algo que me gustaría distribuya ampliamente a menos que alguien con mucha más experiencia diga que es confiable ...

Cuestiones relacionadas