On Thursday 17 January 2008 21:26, Dog Walker wrote:
> On Jan 17, 2008 2:23 PM, Jim Bublitz <[EMAIL PROTECTED]> wrote:
> > On Thursday 17 January 2008 08:27, Dog Walker wrote:
> > > Using pyKde3
> > >
> > > I have a KSytemTray application. I want to change the systray icon
> > > (and tooltip)  when I begin handling a menuitem and change again
> > > before returning. It appears that the icon/tooltip is only set after
> > > returning to pyKde. Can I do what I want? How?
> >
> > Assuming you're using KSystemTray, KSystemTray.setPixmap (pix) sets the
> > icon to "pix", whatever it's value is when called.
> >
> > See PyKDE/examples/systray.py
> >
> > Jim
>
> [...]
>
> I have failed to make myself clear.
>
> I have an icon in the systray with a menu.
> One of the the menuitems is do_time_consuming_task.
> When that menu item is selected by the user, function
> do_time_consuming_task() runs.
> That function tries to set the systray icon to busybusy.png and set
> the tooltip to "TCB'ing".
> Immediatley after doing the icon change and tooltip code, the function
> begins a long task.
> After the long task end, the function changes the systray icon and
> tooltip text back to what it was.
> The function returns.
>
> The icon/tooltip does not change during the running of the function.
> Neither is the icon in the systray repainted if covered or when switching
> desktops.
> -------------------------------------------------
> Anyway I solved the icon change part. The long running function could
> be invoked from the menu or by a timer interrupt. So the first time
> the long running function is entered, the icon is changed and a short
> timer is set to invoke the function. The function returns, is
> reentered, it does its long running thing, sets another icon and
> restores the normal timer interval. Setting a tooltip to show during
> the long running function is worthless because the app loop must be
> running to show it. For the same reason, the icon disappears in the
> systray if the user switches desktops (all the systray icons are
> erased and must be repainted).

You can call your application object's processEvents() method (see 
QApplication docs)  or maybe set other timers to do redraws.

Jim
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to