Peter Kramer
Peter Kramer

Reputation: 192

Tkinter Canvas move item to top level

I have a Tkinter Canvas widget (Python 2.7, not 3), and on this Canvas I have different items. If I create a new item that overlaps an old item, It will be in front. How can I now move the old item in front of the newly created one, or even in front of all other items on the Canvas?

Example code so far:

from Tkinter import *
root = Tk()
canvas = Canvas(root,width=200,height=200,bg="white")
canvas.grid()
firstRect = canvas.create_rectangle(0,0,10,10,fill="red")
secondRect = canvas.create_rectangle(5,5,15,15,fill="blue")

now I want firstRect to be in front of secondRect.

Upvotes: 12

Views: 32925

Answers (2)

Charitoo
Charitoo

Reputation: 1872

If you have multiple items on the canvas and you don't know which one its going to overlap, then do this.

# find the objects that overlap with the newly created one
# x1, y1, x2, y2 are the coordinates of the rectangle

overlappers = canvas.find_overlapping(x1, y1, x2, y2)

for object in overlappers:
    canvas.tag_raise(object)

Upvotes: -1

Joel Cornett
Joel Cornett

Reputation: 24788

Use the tag_lower() and tag_raise() methods for the Canvas object:

canvas.tag_raise(firstRect)

Or:

canvas.tag_lower(secondRect)

Upvotes: 20

Related Questions