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

Reply via email to