Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tkinter in Python 3.4 on Windows don't post internal clipboard data to the Windows clipboard on exit

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.

like image 792
fedorch Avatar asked Oct 12 '14 02:10

fedorch


1 Answers

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.

like image 78
Terry Jan Reedy Avatar answered Nov 20 '22 08:11

Terry Jan Reedy