I’m interested in how to go about creating an application with wxPython that will basically consume part of the screen’s real estate and make it not usable to other applications. I don’t know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
I'm interested in how to go about creating an application with wxPython that will basically consume part of the screen's real estate and make it not usable to other applications. I don't know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
Many thanks,
Josh VanderLinden
I'm fairly certain that the taskbar + system tray is hooked pretty deeply into Windows. You'll probably have to hook into that too and somehow let the other Windows know that the available window real estate is less or somehow intercept their size events. It's possible that Microsoft has this documented somewhere, but I couldn't come up with the correct search terms either.
Try emailing the guys on the PyWin32 list. They might have some ideas: python-win32 Info Page
I'm interested in how to go about creating an application with wxPython that will basically consume part of the screen's real estate and make it not usable to other applications. I don't know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
Many thanks,
Josh VanderLinden
I'm fairly certain that the taskbar + system tray is hooked pretty deeply into Windows. You'll probably have to hook into that too and somehow let the other Windows know that the available window real estate is less or somehow intercept their size events. It's possible that Microsoft has this documented somewhere, but I couldn't come up with the correct search terms either.
Try emailing the guys on the PyWin32 list. They might have some ideas: python-win32 Info Page
I'm interested in how to go about creating an application with wxPython that will basically consume part of the screen's real estate and make it not usable to other applications. I don't know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
Many thanks,
Josh VanderLinden
I'm fairly certain that the taskbar + system tray is hooked pretty deeply into Windows. You'll probably have to hook into that too and somehow let the other Windows know that the available window real estate is less or somehow intercept their size events. It's possible that Microsoft has this documented somewhere, but I couldn't come up with the correct search terms either.
Try emailing the guys on the PyWin32 list. They might have some ideas: python-win32 Info Page
Thanks Mike. What do you suggest for GNOME/KDE and OSX? Should I look to their platform-specific development information as well?
Yeah...this is probably platform specific since you'll be manipulating how the OS reports available window sizes. At least, that's my take on it. Robin or Tim R. will know more...I haven't messed with the window managers in GNOME/KDE and I don't have a Mac, so unless one or more of the gurus from those camps weighs in and contradicts me, I'd say my advice is sound.
Do you know of an actual technical name for what I'm trying to accomplish?
Nope. I googled around some more and the closest thing I found was a closed source(?) VB-squared Taskbar, this thing:
I'm interested in how to go about creating an application with wxPython that will basically consume part of the screen's real estate and make it not usable to other applications. I don't know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
Many thanks,
Josh VanderLinden
I'm fairly certain that the taskbar + system tray is hooked pretty deeply into Windows. You'll probably have to hook into that too and somehow let the other Windows know that the available window real estate is less or somehow intercept their size events. It's possible that Microsoft has this documented somewhere, but I couldn't come up with the correct search terms either.
Try emailing the guys on the PyWin32 list. They might have some ideas: python-win32 Info Page
Thanks Mike. What do you suggest for GNOME/KDE and OSX? Should I look to their platform-specific development information as well?
Yeah...this is probably platform specific since you'll be manipulating how the OS reports available window sizes. At least, that's my take on it. Robin or Tim R. will know more...I haven't messed with the window managers in GNOME/KDE and I don't have a Mac, so unless one or more of the gurus from those camps weighs in and contradicts me, I'd say my advice is sound.
Do you know of an actual technical name for what I'm trying to accomplish?
Nope. I googled around some more and the closest thing I found was a closed source(?) VB-squared Taskbar, this thing:
Great, thanks for the advice. I suppose I'll wait for Robin or Tim to offer their advice if they have any. If I don't hear anything, I'll just work on the assumption that this sort of functionality would be too complex (and annoying) to make it practical for my purposes.
I'm interested in how to go about creating an application with wxPython that will basically consume part of the screen's real estate and make it not usable to other applications. I don't know if there is some technical term for this, otherwise looking for a solution would probably be a lot easier.
What I want is something that behaves like the taskbar in windows or a panel in GNOME/KDE. By default, when you maximize an application, it does not overlap the panels/taskbar, but instead fills the remaining space on the screen. I want a solution that is as cross-platform compatible as possible. My primary targets are Windows, OS X, Linux with GNOME or KDE.
Can I create such an application with wxPython? Is there a tutorial for this sort of behavior?
Many thanks,
Josh VanderLinden
I'm fairly certain that the taskbar + system tray is hooked pretty deeply into Windows. You'll probably have to hook into that too and somehow let the other Windows know that the available window real estate is less or somehow intercept their size events. It's possible that Microsoft has this documented somewhere, but I couldn't come up with the correct search terms either.
Try emailing the guys on the PyWin32 list. They might have some ideas: python-win32 Info Page
Thanks Mike. What do you suggest for GNOME/KDE and OSX? Should I look to their platform-specific development information as well?
Yeah...this is probably platform specific since you'll be manipulating how the OS reports available window sizes. At least, that's my take on it. Robin or Tim R. will know more...I haven't messed with the window managers in GNOME/KDE and I don't have a Mac, so unless one or more of the gurus from those camps weighs in and contradicts me, I'd say my advice is sound.
Do you know of an actual technical name for what I'm trying to accomplish?
Nope. I googled around some more and the closest thing I found was a closed source(?) VB-squared Taskbar, this thing:
Great, thanks for the advice. I suppose I'll wait for Robin or Tim to offer their advice if they have any. If I don't hear anything, I'll just work on the assumption that this sort of functionality would be too complex (and annoying) to make it practical for my purposes.
Thanks again!
_____________
What's your use case? Maybe someone here can give you some ideas for alternatives.
What's your use case? Maybe someone here can give you some ideas for alternatives.
I want my app to be out of the way but easy to get to. Think along the lines of classic WinAMP 2.x--very slim and very easy to get to (especially with the "always on top" turned on). I was thinking about having it consume one of the edges of the user's screen because I think it will need the vertical/horizontal (depending on the screen edge that it is attached to) space if it's going to be so out of the way.
The main application frame will just have a bunch of buttons that are all the same size. Any other widgets that are used in the app will appear in a separate frame/dialog. I plan to have a "system tray" icon, though I'm not looking forward to implementing that with PyObjC...
I suppose another possibility is to have it "auto-hide" and be always on top... Have it wait until the user brings their mouse over to the edge of the screen that the application is attached to and then pop out for them to use it. Any advice for this situation?
Thanks Mike. What do you suggest for GNOME/KDE and OSX? Should I look to their platform-specific development information as well?
Do you know of an actual technical name for what I'm trying to accomplish?
I think it's called an AppBar or something like that. There was some native code floating around for Windows several years ago that helped with implementing this. I'm not sure if this is the same as what I remember, but from the docs it looks like it would do the trick.
Thanks Mike. What do you suggest for GNOME/KDE and OSX? Should I look to their platform-specific development information as well?
Do you know of an actual technical name for what I'm trying to accomplish?
I think it's called an AppBar or something like that. There was some native code floating around for Windows several years ago that helped with implementing this. I'm not sure if this is the same as what I remember, but from the docs it looks like it would do the trick.
For GNOME/KDE I haven't heard of anybody doing this with wxPython so you may need to do some hard work.
I'm not sure if it's possible on OSX.
Thanks Robin! The wxAppBar project seems quite useful. I'll have to keep it in mind if I do any Windows-specific applications.
I think I will just abandon this particular aspect of this project. I don't think it would add enough value to justify the free time spent building it to work on all three platforms.
What's your use case? Maybe someone here can give you some ideas for alternatives.
I want my app to be out of the way but easy to get to. Think along the lines of classic WinAMP 2.x--very slim and very easy to get to (especially with the "always on top" turned on). I was thinking about having it consume one of the edges of the user's screen because I think it will need the vertical/horizontal (depending on the screen edge that it is attached to) space if it's going to be so out of the way.
The main application frame will just have a bunch of buttons that are all the same size. Any other widgets that are used in the app will appear in a separate frame/dialog. I plan to have a "system tray" icon, though I'm not looking forward to implementing that with PyObjC...
Why would you implement it with PyObjC? You can create a system tray icon with wxPython...
I suppose another possibility is to have it "auto-hide" and be always on top... Have it wait until the user brings their mouse over to the edge of the screen that the application is attached to and then pop out for them to use it. Any advice for this situation?
Any other ideas are welcome as well. Thanks!
Well, I've made an application that can always be on top of everything else in wxPython, so that's pretty easy. I don't have a Mac, so I don't know how well it would work there...and I didn't test on Ubuntu as everyone outside of the IT department uses Windows XP as their desktop.
The sliding out idea was something I almost suggested. However, I think that would probably require platform-specific code as well as you'll need to hook into where the OS reports the mouse position. I think that's fairly easy to get using Hammond's PyWin32 package...you'd probably just ping the OS using a timer to get the info and if the mouse was X number of pixels from where ever, pop-out your application. I don't know the internals of the other major OSes well enough to comment on how you would do that on them.
The main application frame will just have a bunch of buttons that are all the same size. Any other widgets that are used in the app will appear in a separate frame/dialog. I plan to have a "system tray" icon, though I'm not looking forward to implementing that with PyObjC...
Why would you implement it with PyObjC? You can create a system tray icon with wxPython...
I suppose another possibility is to have it "auto-hide" and be always on top... Have it wait until the user brings their mouse over to the edge of the screen that the application is attached to and then pop out for them to use it. Any advice for this situation?
Any other ideas are welcome as well. Thanks!
Well, I've made an application that can always be on top of everything else in wxPython, so that's pretty easy. I don't have a Mac, so I don't know how well it would work there...and I didn't test on Ubuntu as everyone outside of the IT department uses Windows XP as their desktop.
The sliding out idea was something I almost suggested. However, I think that would probably require platform-specific code as well as you'll need to hook into where the OS reports the mouse position. I think that's fairly easy to get using Hammond's PyWin32 package...you'd probably just ping the OS using a timer to get the info and if the mouse was X number of pixels from where ever, pop-out your application. I don't know the internals of the other major OSes well enough to comment on how you would do that on them.
Maybe someone else will comment.
If you really can make a system tray icon with straight up wxPython on OSX, I would sure love to learn about it. In past projects, the system tray icons that work fine in Windows and Linux have no effect on OSX. I would feel quite silly if I were just missing something simple to make those same icons work in OSX.
The main application frame will just have a bunch of buttons that are all the same size. Any other widgets that are used in the app will appear in a separate frame/dialog. I plan to have a "system tray" icon, though I'm not looking forward to implementing that with PyObjC...
Why would you implement it with PyObjC? You can create a system tray icon with wxPython...
I suppose another possibility is to have it "auto-hide" and be always on top... Have it wait until the user brings their mouse over to the edge of the screen that the application is attached to and then pop out for them to use it. Any advice for this situation?
Any other ideas are welcome as well. Thanks!
Well, I've made an application that can always be on top of everything else in wxPython, so that's pretty easy. I don't have a Mac, so I don't know how well it would work there...and I didn't test on Ubuntu as everyone outside of the IT department uses Windows XP as their desktop.
The sliding out idea was something I almost suggested. However, I think that would probably require platform-specific code as well as you'll need to hook into where the OS reports the mouse position. I think that's fairly easy to get using Hammond's PyWin32 package...you'd probably just ping the OS using a timer to get the info and if the mouse was X number of pixels from where ever, pop-out your application. I don't know the internals of the other major OSes well enough to comment on how you would do that on them.
Maybe someone else will comment.
If you really can make a system tray icon with straight up wxPython on OSX, I would sure love to learn about it. In past projects, the system tray icons that work fine in Windows and Linux have no effect on OSX. I would feel quite silly if I were just missing something simple to make those same icons work in OSX.
__________________
Oh. I'm not a Mac user...so I guess I shouldn't have made that statement. Maybe Robin or Cody can tell us if this is possible though.
I think it's called an AppBar or something like that. There was some
native code floating around for Windows several years ago that helped
with implementing this. I'm not sure if this is the same as what I
remember, but from the docs it looks like it would do the trick.
Wow, I'd forgotten all about that project. Hmm, wxoo isn't maintained
any more, so it wouldn't work out-of-box. Code rot strikes again. wxoo
just provided very basic functionality that is probably part of wxPython
these days. Could be resurrected, but as I'm not on Win32 any more I
don't have much motivation to work on it.
If anyone does have motivation, let me know and I can add you to the
project list. IIRC there were quite a few cases where the behavior was
undesirable, where you could wind up dragging another appbar "behind"
your appbar because of limits in the API. It was created to allow a
call center to create a heads-up-display to display incoming call,
messages from coordinators and the like in an "always on" form. In that
configuration it worked reasonably well (i.e. people were not moving it
around a lot).
If you really can make a system tray icon with straight up wxPython on OSX, I would sure love to learn about it. In past projects, the system tray icons that work fine in Windows and Linux have no effect on OSX. I would feel quite silly if I were just missing something simple to make those same icons work in OSX.
wx.TaskBarIcon on OSX modifies the app's dock icon. Run the demo and right-click on the dock icon and you'll see a custom menu and also have the ability to cycle the icon through a series of icons.
At one point it was decided that if you created a 2nd, 3rd... wxTaskbarIcon on the Mac that they would show up in the menubar, but I don't think that's been done yet.
If you really can make a system tray icon with straight up wxPython on OSX, I would sure love to learn about it. In past projects, the system tray icons that work fine in Windows and Linux have no effect on OSX. I would feel quite silly if I were just missing something simple to make those same icons work in OSX.
wx.TaskBarIcon on OSX modifies the app's dock icon. Run the demo and right-click on the dock icon and you'll see a custom menu and also have the ability to cycle the icon through a series of icons.
At one point it was decided that if you created a 2nd, 3rd... wxTaskbarIcon on the Mac that they would show up in the menubar, but I don't think that's been done yet.
This would be an incredibly useful feature. PyObjC makes me feel dirty.