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