Lines on a tkinter.Canvas

Pedro Izecksohn izecksohn at yahoo.com
Thu Jun 12 19:11:34 EDT 2014


----- Original Message -----

> From: Gregory Ewing
> To: python-list at python.org
> Cc: 
> Sent: Thursday, June 12, 2014 8:38 AM
> Subject: Re: Lines on a tkinter.Canvas
> 
> Pedro Izecksohn wrote:
>>  The Canvas' method create_line turns on at least 2 pixels. But I want 
> to turn
>>  on many single pixels on a Canvas.
> 
> You could try using a 1x1 rectangle instead.
> 
> However, be aware that either of these will use quite a
> lot of memory per pixel. If you are drawing a very large
> number of pixels, this could cause performance problems.
> In that case, you might want to use a different approach,
> such as creating an image and telling the canvas to display
> the image.

  Thank you Greg. Your second approach works and the script became:

#!/usr/bin/python3

import tkinter as tk

BITMAP = '''
#define im_width 1
#define im_height 1
static char im_bits[] = {
0xff
};
'''

class Point ():
  def __init__ (self, x, y):
    self.x = x
    self.y = y

class Board (tk.Frame):
  def __init__ (self, bg, dimensions):
    tk.Frame.__init__ (self, tk.Tk())
    self.pack()
    self.canvas = tk.Canvas (self, bd = 0, bg = bg, width = dimensions.x, height = dimensions.y)
    self.canvas.pack (side = "top")
    self.objects_drawn = []
  def drawLine (self, pa, pb, color):
    self.canvas.create_line (pa.x, pa.y, pb.x, pb.y, fill = color)
  def drawPoint (self, p, color):
    bitmap = tk.BitmapImage (data=BITMAP, foreground = color)
    self.objects_drawn.append (bitmap)
    self.canvas.create_image (p.x, p.y, image = bitmap)

dimensions = Point (500, 500)
board = Board ('black', dimensions)
color = 'red'
p = Point (0, 250)
while (p.x < dimensions.x):
  board.drawPoint (p, color)
  p.x += 1
pa = Point (0, 350)
pb = Point (499, 350)
board.drawLine (pa, pb, color)
board.mainloop()



More information about the Python-list mailing list