[PyQt] Weird behavior in fromMimeData method (pyScintilla)

Phil Thompson phil at riverbankcomputing.com
Wed Sep 19 08:56:47 BST 2012


On Wed, 19 Sep 2012 08:05:42 +0200, Salvatore Larosa <lrssvtml at gmail.com>
wrote:
> Hi,
> 
> 2012/9/19 Phil Thompson <phil at riverbankcomputing.com>
> 
>> On Tue, 18 Sep 2012 23:16:00 +0200, Salvatore Larosa
<lrssvtml at gmail.com>
>> wrote:
>> > Hi all,
>> > I am not sure if this is the rigth place to ask!
>> >
>> > I created a small console to execute python command by using
Qscintilla
>> > python bindings but something doesnt work with MIME data.
>> >
>> > My code is:
>> >
>> > def fromMimeData(self, source):
>> >         if source.hasText():
>> >             pasteList = QStringList()
>> >             pasteList = source.text().split("\n")
>> >             if (len(pasteList) > 1):
>> >               self.move_cursor_to_end()
>> >             for line in pasteList[:-1]:
>> >                 self.append(line)
>> >                 self.move_cursor_to_end()
>> >                 self.runCommand(unicode(self.currentCommand()))
>> >             self.append(unicode(pasteList[-1]))
>> >             self.move_cursor_to_end()
>> >
>> > First question: when I paste some text in console and run command I
>> > get:
>> >
>> > TypeError: invalid result type from PythonEdit.fromMimeData()
>> >
>> > How I can avoid it?
>>
>> fromMimeData() should return a 2-tuple of the text as a QByteArray and
a
>> bool set if the selection is rectangular.
>>
> 
> Thanks for your reply.
> 
> oddly the paste command works well although returns that error!
> how should I manage the contents of tuple?

I don't know what your code is supposed to do. If your implementation of
fromMimeData() is adding extra behaviour (rather than changing the default
behaviour) then call the super-class implementation, ie. add the following
at the end...

        return super(MyClass, self).fromMimeData(source)

>> > Second question: If in my console I typed some text ( e.g def
>> > blablabla(self): ) and then
>> > I want edit it by replacing "self" with "source" by using paste
>> > command,
>> > the pasted text
>> > is placed at the end of the current line and not between brace
getting
>> the
>> > following result:
>> >
>> > def blablabla(self):source
>> >
>> > Any idea on how I can solve it?
>>
>> I can't reproduce that. What does move_cursor_to_end() do in the above
>> code?
>>
> 
> move_cursor_to_end() move the cursor at the end of the current line!.
> the result doesnt change if I comment out it!
> if in my code I don't use the fromMimeData method, paste and drag/frop
> event does work  as expected!
> But I need it to execute command when multi-line text is dropped or
pasted!
> 
> 
>> Phil
>>
> 
> Regards,
> 
> -SL

Phil


More information about the PyQt mailing list