[PyKDE] Use of postEvent
Phil Thompson
phil at river-bank.demon.co.uk
Thu Mar 21 10:24:32 GMT 2002
greg Landrum wrote:
>
> (apologies if this arrives a second time... I used the wrong return address
> on the last one so it got held up by mailman)
>
> [System details: RH linux 7.1 kernel 2.4.2-2smp, Python 2.1.1, Qt 3.0.2,
> PyQT/Sip-3.1rc2]
>
> I just started using PyQt recently (I'm kind of a refugee from wxPython)
> and I'm really impressed. Qt itself is pretty nice and PyQt really adds to
> it. Thanks for the hard work.
>
> On to my question/problem.
>
> I'd like to add some RPC control to my application. So I've got a PyQt
> application running in one thread and an xmlrpc server running in
> another. Whenever the xmlrpc server gets a call, it constructs a special
> event and fires that into the event queue for the main app using
> postEvent. I've built a similar system for wxPython to do this, so the
> xmlrpc/multithreading/event queue bits were pretty straightforward to get
> working. (Well, kind of, getting PyQt compiled with thread support fully
> enabled wasn't totally straightforward, more on this below). Things now
> more or less work, but there's a snag: my event doesn't get processed by
> the application until I do something like move the mouse from one window to
> another or change focus or something like that. Needless to say, this
> makes the RPC server somewhat less useful. :-S
>
> Any clues as to why this might be the case?
I assume you are using QThread.postEvent() (rather than
QApplication.postEvent()). Can you try the attached patch? It might not
work, but it's the only obvious thing I can try from a PyQt point of
view.
> An aside about building PyQt with thread support:
> I have a qt build with multi-threading enabled, but I had to screw around a
> bit with the PyQt and sip configure scripts to get them to enable thread
> support. I know very little about configure, but it looks like the tests
> at around line 9440 in the sip configure script should have the "Regular
> Qt" case *after* the multithreaded and embedded cases. Similarly, at line
> 8899 in the configure script for PyQt, I had to move the 'qt' option to
> after 'qt-mt' and 'qte'.
So you have both qt and qt-mt installed at the same time in the same
directory? Is this something that distros do? If so I guess it really
needs to be a configuration option, but I've swapped the order for now
as that is probably right for most people.
Phil
-------------- next part --------------
--- sipqtQThread.cpp.orig Mon Mar 18 10:49:50 2002
+++ sipqtQThread.cpp Thu Mar 21 09:08:04 2002
@@ -180,9 +180,11 @@
QObject * a0;
QEvent * a1;
- if (sipParseArgs(&sipArgsParsed,sipArgs,"J0J0",sipClass_QObject,&a0,sipClass_QEvent,&a1))
+ if (sipParseArgs(&sipArgsParsed,sipArgs,"J0J2",sipClass_QObject,&a0,sipClass_QEvent,&a1))
{
+ sipReleaseLock();
QThread::postEvent(a0,a1);
+ sipAcquireLock();
Py_INCREF(Py_None);
return Py_None;
More information about the PyQt
mailing list