I use the following code to place result of my small scripts in clipboard.
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append("Result")
It works fine on Python version 3.3.5 and earlier. But when I upgrade to Python 3.4 it was receive empty clipboard. I tried the 3.4.0, 3.4.1 and 3.4.2 and all received one result (empty clipboard). If I prevent the script from the immediate exit, adding input()
after clipboard_append()
, I see that clipboard contains the correct "Result".
Update1:
The modified test script shows that the problem is not a timing issue:
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append("Result")
input()
r.destroy()
If I run this script, wait a few seconds, press Enter, I receive empty clipboard.
If I run script, switch to any other window and press Ctrl+V, I receive "Result" and "Result" remains in clipboard after script exits.
I think in tcl/tk 8.6 clipboard_clear()
affect system clipboard, but clipboard_append
affect only internal tcl/tk clipboard that transfered to system clipboard only by OS request. Looks like it was done in Linux, that don't have system clipboard.
Update2:
Last mention clipboard in Tk changelog refers to the 2004:
2004-05-03 (bug fix)[939389, 822002, 732662] Correctly post internal
clipboard data to the Windows clipboard on exit. (hobbs)
It seems that the error corrected in 2004 returned to us 10 years later.
I suspect that 'Result' never gets to the clipboard, rather than being cleared. 3.4 on Windows come with tcl/tk 8.6 instead of 8.5. I suspect that this is the difference, and it is possibly a timing issue. Does r.destroy
after the append work? Explicitly destroying the tk root before exiting python is generally a good idea. We had problems with the test suite until we started doing this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With