Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #73241
| References | <mailman.11027.1402548495.18130.python-list@python.org> <bvthovFg8ldU1@mid.individual.net> |
|---|---|
| Date | 2014-06-12 16:11 -0700 |
| From | Pedro Izecksohn <izecksohn@yahoo.com> |
| Subject | Re: Lines on a tkinter.Canvas |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.11045.1402614834.18130.python-list@python.org> (permalink) |
----- Original Message -----
> From: Gregory Ewing
> To: python-list@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()
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Lines on a tkinter.Canvas Pedro Izecksohn <izecksohn@yahoo.com> - 2014-06-11 18:57 -0700
Re: Lines on a tkinter.Canvas Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-06-12 23:38 +1200
Re: Lines on a tkinter.Canvas Terry Reedy <tjreedy@udel.edu> - 2014-06-12 13:44 -0400
Re: Lines on a tkinter.Canvas Pedro Izecksohn <izecksohn@yahoo.com> - 2014-06-12 13:33 -0700
Re: Lines on a tkinter.Canvas Pedro Izecksohn <izecksohn@yahoo.com> - 2014-06-12 16:11 -0700
Re: Lines on a tkinter.Canvas Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-06-13 12:31 +1200
csiph-web