Simple Tk Window base class
A simple component providing a framework for having a Tk window as a component.
TkInvisibleWindow is a simple implementation of an invisible (hidden) Tk window, useful if you want none of the visible windows to be the Tk root window.
This component provides basic integration for Tk. It creates and sets up a Tk window widget, and then provides a kamaelia main loop that ensures Tk's own event processing loop is regularly called.
self.window contains the Tk window widget.
To set up your own widgets and event handling bindings for the window, reimplement the setupWindow() method.
NOTE: Do not bind the "<Destroy>" event as this is already handled. Instead, reimplement the destroyHandler() method. This is guaranteed to only be called if the destroy event is for this specific window.
The first window instantiated is the Tk "root" window. Note that closing this window will result in Tk trying to close down. To avoid this style of behaviour, create a TkInvisibleWindow as the root.
The existing main() method ensures Tk's event processing loop is regularly called.
You can reimplement main(). However, you must ensure you include the existing functionality: - regularly calling tkupdate() to ensure Tk gets to process its own events - calls self.window.destroy() method to destroy the window upon shutdown. - finishes if self.isDestroyed() returns True
The existing main() method will cause the component to terminate if a producerFinished or shutdownMicroprocess message is received on the "control" inbox. It sends the message on out of the "signal" outbox and calls self.window.destroy() to ensure the window is destroyed.
NOTE: main() must not ask to be paused as it calls the Tk event loop. If the Tk event loop is not called, then a Tk app will freeze and be unable to respond to events.
NOTE: Event bindings are called from within Tk event handling. If, for example, there are two (or more) TkWindow instances, then a given event handler could be called whilst the thread of execution is actually within the other TkWindow component's main() method. This is a bit messy. It will not cause problems in a single threaded system, but may be an issue once Axon/Kamaelia is able to distribute across multiple processors.
Started as a first hash attempt at some components to incorporate Tkinter into Kamaelia in cvs:/Sketches/tk/tkInterComponents.py
Turned out to be remarkably resilient so far, so migrated into the main codebase.
TkWindow() -> new TkWindow component
A component providing a Tk window. The first TkWindow created will be the "root" window.
Subclass to implement your own widgets and functionality on the window.
Methods defined here
Handler for destroy event. Do not override.
x.__init__(...) initializes x; see x.__class__.__doc__ for signature
Stub method. Reimplement with your own functionality to respond to a tk window destroy event.
Returns true if this window has been destroyed
Main loop. Stub method, reimplement with your own functionality.
Must regularly call self.tkupdate() to ensure tk event processing happens.
Populate the window with widgets, set its title, set up event bindings etc...
Do not bind the "<Destroy>" event, as this is already handled.
Stub method. Reimplement with your own functionality.
Calls tk's event processing loop (if this is the root window).
To be called from within self.main().
tkInvisibleWindow() -> new tkInvisibleWindow component.
An invisible, empty tk window. Can use as a 'root' window, thereby ensuring closing any (visible) window doesn't terminate Tk (closing the root does).
Methods defined here
Sets up and hides the window.
Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!
Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.
-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT
This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC. (the site is powered by a wiki engine)
(C) Copyright 2008 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved.