Tkinter Problem?

D

Davy

Hi all,

I have written a simple Tkinter program, that is draw a rectangle in a
canvas, when I press Up key, the rectangle move up. But the program
seems work not properly? My environment is Python2.5+PythonWin.

##----------------------
from Tkinter import *

class MyApp:
def __init__(self,parent):
self.myContainer1 = Frame(parent)
self.myContainer1.pack()
self.canv = Canvas(relief=SUNKEN)
self.canv.config(width = 300,height=300)
self.canv.pack()
self.canv.create_rectangle(100,100,150,150,tags="rect")
self.canv.bind('<Up>',self._onUpKey)
self.canv.bind('<Return>', self._onReturnKey)
def _onUpKey(self,event):
self.canv.move(tagOrId,xAmount=0,yAmount=10)
def _onReturnKey(self,event):
print 'Hello world'


root = Tk()
myapp = MyApp(root)
root.mainloop()

##----------------------

Best regards,
Davy
 
K

kyosohma

Hi all,

I have written a simple Tkinter program, that is draw a rectangle in a
canvas, when I press Up key, the rectangle move up. But the program
seems work not properly? My environment is Python2.5+PythonWin.

##----------------------
from Tkinter import *

class MyApp:
def __init__(self,parent):
self.myContainer1 = Frame(parent)
self.myContainer1.pack()
self.canv = Canvas(relief=SUNKEN)
self.canv.config(width = 300,height=300)
self.canv.pack()
self.canv.create_rectangle(100,100,150,150,tags="rect")
self.canv.bind('<Up>',self._onUpKey)
self.canv.bind('<Return>', self._onReturnKey)
def _onUpKey(self,event):
self.canv.move(tagOrId,xAmount=0,yAmount=10)
def _onReturnKey(self,event):
print 'Hello world'

root = Tk()
myapp = MyApp(root)
root.mainloop()

##----------------------

Best regards,
Davy

I'm not sure, but I don't think you can bind the a key to a
canvas...you'd want to bind to the rectangle itself somehow.

Some articles on binding:

http://effbot.org/pyfaq/i-can-t-get-key-bindings-to-work-in-tkinter-why.htm
http://www.pythonware.com/library/tkinter/introduction/events-and-bindings.htm
http://docs.huihoo.com/tkinter/an-introduction-to-tkinter-1997/intro06.htm

Info on the Canvas object:

# this one talks about setting the focus on an item within the canvas
so that it has key bindings...maybe that will work.
http://effbot.org/tkinterbook/canvas.htm
http://www.pythonware.com/library/tkinter/introduction/canvas.htm

I am not a Tkinter expert. I am much better with wxPython, but I am
only starting to be able to answer questions on that topic.

Hopefully someone with more knowledge will show up shortly.

Mike
 
M

Marc 'BlackJack' Rintsch

##----------------------
from Tkinter import *

class MyApp:
def __init__(self,parent):
self.myContainer1 = Frame(parent)
self.myContainer1.pack()
self.canv = Canvas(relief=SUNKEN)
self.canv.config(width = 300,height=300)
self.canv.pack()
self.canv.create_rectangle(100,100,150,150,tags="rect")
self.canv.bind('<Up>',self._onUpKey)
self.canv.bind('<Return>', self._onReturnKey)
def _onUpKey(self,event):
self.canv.move(tagOrId,xAmount=0,yAmount=10)

Where's `tagOrId` coming from? That's a `NameError` here.

Ciao,
Marc 'BlackJack' Rintsch
 
P

Peter Otten

Marc said:
Where's `tagOrId` coming from? That's a `NameError` here.

Also, the arguments of Canvas.move() are positional.

self.canv.move("rect", 0, 10)

should work though the direction of the move might surprise you.

Peter
 
D

Davy

Hi all,

I have solved the problem after read some code. Because Tk.Canvas do
not have a focus, it does not receive a key input. The solution is
bind key input to the highest level 'root'

root.bind('<Up>',self._onUpKey)

Davy
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top