wxpython:how to minimize to taskbar
kyosohma at gmail.com
kyosohma at gmail.com
Tue Aug 28 11:08:29 EDT 2007
On Aug 28, 9:50 am, "programmer... at gmail.com"
<programmer... at gmail.com> wrote:
> On Aug 28, 9:10 am, Jimmy <mcknight0... at gmail.com> wrote:
>
> > I'm kinda newbie to python and wxPython. Now I'm confronting a thorny
> > problem: how can I make my program minimize to the taskbar
> > represented as an ico, and when there is some message from network
> > coming, it will pop out?
>
> Warning. I have not tested this. I happened to have some old code
> that would iconify to the system tray. Here's what I think you need
> to do. (If it does not work, just yell and I'll try to hack something
> together for you.)
>
> Inside the ctor of your mainframe, you'll need to construct a
> wxTaskBarIcon (I derive from it). This is my code that derives from
> wxTaskBarIcon. The comments should give you a good idea of how this
> thing works. I *think* this will shove the icon in the system tray,
> even if you're not `iconified` -- so only create it if you want to
> show up in the system tray.
>
> ## My wxTaskBarIcon derived object...
> """
> Taskbar icon.
>
> Not much functionality here, not even a menu. In the future, this
> will be a
> good place to allow dclient functionality from the systray.
> """
>
> from wx import TaskBarIcon, EVT_TASKBAR_LEFT_DCLICK
>
> class ddTaskBarIcon(TaskBarIcon):
> def __init__(self, icon, tooltip, frame):
> TaskBarIcon.__init__(self)
> self.SetIcon(icon, tooltip)
> self.frame = frame
>
> #
> # At the very least, restore the frame if double clicked. Add
> other
> # events later.
> #
> self.Bind(EVT_TASKBAR_LEFT_DCLICK, self.on_left_dclick)
>
> def on_left_dclick(self, e):
> if self.frame.IsIconized():
> self.frame.Iconize(False)
> if not self.frame.IsShown():
> self.frame.Show(True)
> self.frame.Raise()
>
> def CreatePopupMenu(self):
> """
> Override with menu functionality, later.
> """
> return None
>
> Next is where I use it in my wxFrame derived object. This is the code
> in my ctor.
> # ddTaskBarIcon is defined above...
> self.trayicon = ddTaskBarIcon(self.frame_icon, "Dap Daemon", self)
>
> # Handle the window being `iconized` (err minimized)
> self.Bind(wx.EVT_ICONIZE, self.on_iconify)
>
> # This is the event handler referenced in the ctor above
> def on_iconify(self, e):
> """
> Being minimized, hide self, which removes the program from the
> taskbar.
> """
> self.Hide()
>
> So how does this work? Well, the ddTaskBarIcon (err, i realize this
> is a misnomer) is constructed, which puts an icon in the system tray.
> The icon has a dbl-click event handler that will `raise` and show the
> window if necessary.
>
> The iconify event handler will hide the window if a minimize event
> occurs. This keeps the window from showing up in the windows taskbar.
>
> Thats the magic. YMMV.
>
> FWIW - the code I reference is over 5 years old and still runs with
> wxPython 2.8ish... Kudos to Robin Dunn and crew. Great job.
>
> jw
I've been dinking around with getting one of my programs to minimize
to the system tray for quite a while. I could get the icon, but I
could not get an event to fire when I minimized. Thanks for the code.
Now it works.
Mike
More information about the Python-list
mailing list