title: Python3 tkinter.Canvas.move() method makes artifacts on screen
body: <p>I'm trying to execute the code found in one of the Stackoverflow answers. It's a single window application with 2 circles which can be moved with the mouse.
  When I move circles - I see artifacts. See <a href="https://i.stack.imgur.com/tnjNG.png" rel="nofollow noreferrer">Sample</a></p>
  
  <p>Program code:</p>
  
  <pre><code>import tkinter as tk
  
  TOKENWIDTH = 10
  
  class Example(tk.Frame):
      '''Illustrate how to drag items on a Tkinter canvas'''
  
      def __init__(self, parent):
          tk.Frame.__init__(self, parent)
  
          # create a canvas
          self.canvas = tk.Canvas(width=400, height=400, bg="white")
          self.canvas.pack(fill="both", expand=True)
  
          # this data is used to keep track of an
          # item being dragged
          self._drag_data = {"x": 0, "y": 0, "item": None}
  
          # create a couple of movable objects
          self._create_token((100, 100), "red")
          self._create_token((200, 100), "black")
  
          # add bindings for clicking, dragging and releasing over
          # any object with the "token" tag
          self.canvas.tag_bind("token", "&lt;ButtonPress-1&gt;", self.on_token_press)
          self.canvas.tag_bind("token", "&lt;ButtonRelease-1&gt;", self.on_token_release)
          self.canvas.tag_bind("token", "&lt;B1-Motion&gt;", self.on_token_motion)
  
      def _create_token(self, coord, color):
          '''Create a token at the given coordinate in the given color'''
          (x,y) = coord
          self.canvas.create_oval(x-25, y-25, x+25, y+25,
                                  outline="blue", fill=color, tags="token", width = TOKENWIDTH)
  
      def on_token_press(self, event):
          '''Begining drag of an object'''
          # record the item and its location
          self._drag_data["item"] = self.canvas.find_closest(event.x, event.y)[0]
          self._drag_data["x"] = event.x
          self._drag_data["y"] = event.y
          self.canvas.update_idletasks()
  
      def on_token_release(self, event):
          '''End drag of an object'''
          # reset the drag information
          self._drag_data["item"] = None
          self._drag_data["x"] = 0
          self._drag_data["y"] = 0
          self.canvas.update_idletasks()
  
      def on_token_motion(self, event):
          '''Handle dragging of an object'''
          # compute how much the mouse has moved
          delta_x = event.x - self._drag_data["x"]
          delta_y = event.y - self._drag_data["y"]
          # move the object the appropriate amount
          self.canvas.move(self._drag_data["item"], delta_x, delta_y)
          # record the new position
          self._drag_data["x"] = event.x
          self._drag_data["y"] = event.y
          self.canvas.update_idletasks()
  
  if __name__ == "__main__":
      root = tk.Tk()
      Example(root).pack(fill="both", expand=True)
      root.mainloop()
  </code></pre>
  
  <p>The code has TOKENWIDTH which is used in standard Canvas.create_oval() method.</p>
  
  <p>I experimented a bit and found that When TOKENWIDTH is set to 6 or more, the code produces artifacts on Canvas when moving object. If TOKENWIDTH is within 1..5 everything works great.</p>
  
  <p>The following line of code doesn't help:</p>
  
  <blockquote>
    <p>self.canvas.update_idletasks()</p>
  </blockquote>
  
  <p>How this issues can be fixed? Any ideas?
  As a workaround I think about putting two circles of different color one on another to make a round "border" effect.</p>