Tkinter focus problem
John Grayson
johngrayson at home.com
Fri Jun 30 13:25:47 EDT 2000
More information about the Python-list mailing list
Fri Jun 30 13:25:47 EDT 2000
- Previous message (by thread): Job Opportunity
- Next message (by thread): Tkinter focus problem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In article <395CC8DE.AA663D4 at ieee.org>, Didier WILLAME <didier.willame at ieee.org> wrote: > This is a multi-part message in MIME format. > --------------EAB9DEA81EB868EA42827E00 > Content-Type: text/plain; charset=us-ascii > Content-Transfer-Encoding: 7bit > > Hello all, > > I've slight problems with focus in Tkinter, running under win NT. > > With the following script I'm able to create 'nodes' (left button) in a > canvas. The color of a 'node' toggles if the mouse is putting on. > Moreover, I would like display "Hello World!" when I press on the key > '1' and, when the mouse is putting on this 'node'. > > But I'm unable to bind a key event (line 25), although I can run the > script with a button event (line 26 instead of line 25). > I should probably give the focus to the 'node' object inside the > entryNode function (line 57). > > Thank you for your time, > Didier > Well, you need to give the canvas focus. However, I don't think that your original code is adequate, since I'm sure you will want to know *which* node is active. I've restructured your code a bit, storing the current item that has been entered, giving it a new highlight when '1' is pressed. Should get you going again... John Grayson (Python and Tkinter Programming) # ---------- from Tkinter import * class Graph( Frame ): # ---------- def __init__( self, master=None ): Frame.__init__( self, master ) self.pack() self.createCanvas() self.activeNode = None # ---------- def createCanvas( self ): self.editingArea = Canvas( self ) # --- To create a node with the left button. self.editingArea.bind( '<Button-1>', self.mkNode ) self.editingArea.bind( '<KeyPress-1>', self.activateNode ) self.editingArea.bind( '<Button-2>', self.activateNode ) # --- To toggle the node color when passing with the mouse. self.editingArea.tag_bind( 'node', '<Any-Enter>', self.entryNode ) self.editingArea.tag_bind( 'node', '<Any-Leave>', self.leaveNode ) self.editingArea.pack(side=TOP) self.editingArea.focus_set() # ---------- def mkNode( self, event ): """Create a new node at (x,y)""" x = event.x y = event.y new = self.editingArea.create_oval( x-5, y-5, x+5, y+5 ) self.editingArea.itemconfigure( new, tag='node', outline='black', fill='red' ) # ---------- def entryNode( self, event ): self.editingArea.itemconfigure( CURRENT, fill='blue' ) self.activeNode = self.editingArea.find_withtag( CURRENT ) # ---------- def leaveNode( self, event ): self.editingArea.itemconfigure( CURRENT, fill= 'red' ) self.activeNode = None # ---------- def srcNode( self, event=None ): print 'Hello World!' def activateNode( self, event ): if self.activeNode: self.srcNode() self.editingArea.itemconfigure( self.activeNode, fill='green') # ----------------------------------------------- graph = Graph() try: graph.mainloop() except KeyboardInterrupt: graph.quit() Sent via Deja.com http://www.deja.com/ Before you buy.
- Previous message (by thread): Job Opportunity
- Next message (by thread): Tkinter focus problem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list