2012-02-17 15 views
7

Ilekroć wypróbuję następujące rzeczy w moim interpreterze python. Jestem w stanie skopiować słowo powitania do linii poleceń, nawet po zamknięciu interpreterNie można dodać do schowka

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

Jednak jeśli mogę umieścić to w pliku o nazwie test.py a następnie spróbuj

python test.py 

ten nie działa, nie mogę dołączyć do tego schowka systemowego

czy ktoś wie dlaczego nie wiem, czy to, co różnica między uruchomienie go w skrypcie i tłumacza spowodowałoby

+0

Jeśli zostawiasz otwarty interpreter, to właśnie dlatego (dla pierwszego przypadku). Po uruchomieniu Pythona i wyczyszczeniu go oczyści to, co jest w schowku. – dennmat

+0

Jak wskazałem w pytaniu, zamykam interpreter i nadal kopiuje go do schowka. – samirahmed

+1

Utracono tę część, jednak powinieneś najpierw zadzwonić do clipboard_clear, aby się upewnić, że nie ma w niej nic brudnego. Jednak nie jestem pewien, dlaczego byłby inny między tymi dwoma, ponieważ są one dokładnie tym samym. Mam nadzieję, że ktoś ma dla ciebie odpowiedź. – dennmat

Odpowiedz

4

Wygląda na to, że nie zadziała, dopóki Tkinter nie znajdzie się w jego głównym luku. Działa to w moim systemie:

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

'r.update()' również wystarcza, jeśli nie chcesz mieć pętli. –

+0

co, jeśli nie chcę mieć tego połączenia? Chcę, aby mój program kończył się po tym. 'r.update()' nie pomaga. używanie timeout jako obejścia (patrz poniżej) działa – Blauhirn

2

Widzę również tę różnicę w zachowaniu. Sugerowane rozwiązanie tkintera do umieszczania tekstu w schowku działa poprawnie za pomocą wiersza poleceń, ale pozostawia puste pole schowka, gdy jest używane w programie. Użycie mainloop() na końcu programu działa, ale oznacza, że ​​program się nie skończy i użycie r.update() nie pomoże.

Uwaga: Jeśli schowek zostanie wklejony do innej aplikacji przed zakończeniem programu (przez zawieszenie programu po zakończeniu wprowadzania danych przez użytkownika), rozwiązanie tkintera działa dobrze, nawet po zakończeniu programu. Ale jeśli program kończy się, zanim schowek zostanie wklejony do innego programu, schowek będzie pusty.

1

Jak Deel, sugestia Patrick T Neslon i inni użyć:

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

nie działa w non-GUI aplikacji (aktualizacja nie działa albo) (Win 7/64, Python 2.7.10/32). Działa to jednak wydaje się, że hack, inspirowany https://bugs.python.org/issue23760:

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

100ms zwykle pracował w moim systemie, więc poszedł z 500. na narzędzia, które będę używał, a nie coś, co chcę rozpowszechniać bardzo szeroko, chyba że ktoś o znacznie większym doświadczeniu mówi, że jest niezawodny ...

Powiązane problemy