[PyQt] Weird behavior in fromMimeData method (pyScintilla)

Phil Thompson phil at riverbankcomputing.com
Thu Sep 20 09:42:30 BST 2012


On Thu, 20 Sep 2012 00:48:10 +0200, Salvatore Larosa <lrssvtml at gmail.com>
wrote:
> Hi,
> 
> 2012/9/19 Phil Thompson <phil at riverbankcomputing.com>
> 
>> On Wed, 19 Sep 2012 14:54:57 +0200, Salvatore Larosa
<lrssvtml at gmail.com>
>> wrote:
>> > Hi Phil,
>> >
>> > 2012/9/19 Phil Thompson <phil at riverbankcomputing.com>
>> >
>> >> 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)
>> >>
>> >>
>> > That solve the problem about typeError, but now it paste twice the
same
>> > word!
>> > You can see the source code here [1] (MIME data stuff is at line
418).
>>
>> The purpose of fromMimeData() is to allow you to specify how MIME data
is
>> converted to text. It looks like you are trying to use it for another
>> purpose. You should probably look at reimplementing dropEvent()
instead.
>>
>>
> I thought it would work like insertFromMimeData [1].
> I tested it with QTextEdit widget and works fine!
> 
> I need that to execute multi-line command in my shell i.e.:
>>>> if True:
> . . .    print "Hello"
> . . . if False:
> . . .    print "Bye Bye"
> 
> so the last command line only paste the text doesnt run it!
> 
> Also, I implemented dropEvent() and has worked only for drag and drop
event
> and not to paste :-(

So reimplement paste().

Phil


More information about the PyQt mailing list