I've been reading and debugging a bit what firefox is doing and how the selection is treated. I couldn't find anywhere how to handle binary data, but firefox when you copy an image it creates customs mime types like image/png that contain the data in a form '0x39 0xf7 0xb8 0x8f 0xff ...' Now I don't know if it is tk/tcl or _tkinter that makes this interpretation or the data are really ascii written in hex format, but I think even like this it can work for me.
An interesting feature is the selection_get(type='TARGETS') which returns all possible mime/formats available. V. ________________________________________ From: Vasilis Vlachoudis Sent: Thursday, March 01, 2018 17:13 To: Michael Lange; tkinter-discuss@python.org Subject: RE: [Tkinter-discuss] clipboard and bytes I did something else. I've used the binascii.b2a_hex() and a2b_hex() functions to convert the bytes() to a hex string and the reverse (double in size, and a useless UTF-8 conversion, encode/decode) This way it works but not a clean approach, since I am copying in the clipboard binary data in a form of ascii. Is there a way to create a new mime format and advertise the format somehow in the clipboard? Vasilis ________________________________________ From: Vasilis Vlachoudis Sent: Thursday, March 01, 2018 16:42 To: Michael Lange; tkinter-discuss@python.org Subject: RE: [Tkinter-discuss] clipboard and bytes Many thanks! I works within the same process. When I try to launch it twice, so I can have clipboard exchange between different processes I get the following exception: Traceback (most recent call last): File "/usr/lib/python3.6/tkinter/__init__.py", line 1702, in __call__ return self.func(*args) File "foo.py", line 41, in paste res = root.tk.call(clip) _tkinter.TclError: invalid command name "139879786444744cp" I saw in the documentation that by default it uses the UTF8STRING as type I've tried to force it to type="STRING" but with no success ________________________________________ From: Tkinter-discuss [tkinter-discuss-bounces+vasilis.vlachoudis=cern...@python.org] on behalf of Michael Lange [klappn...@web.de] Sent: Thursday, March 01, 2018 00:12 To: tkinter-discuss@python.org Subject: Re: [Tkinter-discuss] clipboard and bytes On Wed, 28 Feb 2018 20:42:51 +0100 Michael Lange <klappn...@web.de> wrote: (...) > So at least this primitive seems to work. Maybe you can use this > technique to achieve what you want. Or maybe this slightly modified example comes closer to what you are looking for: from tkinter import * root = Tk() def copy(string): def cp(): return string copyfunc = (root.register(cp)) return(copyfunc) root.clipboard_clear() root.clipboard_append(copy(b'foobar'), type='foo') def paste(ev): clip = root.clipboard_get(type='foo') res = root.tk.call(clip) print('->', res, type(res)) root.bind('<F1>', paste) root.mainloop() Regards Michael .-.. .. ...- . .-.. --- -. --. .- -. -.. .--. .-. --- ... .--. . .-. "... freedom ... is a worship word..." "It is our worship word too." -- Cloud William and Kirk, "The Omega Glory", stardate unknown _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss