Lines on a tkinter.Canvas
Peter Otten
__peter__ at web.de
Thu Jun 12 03:02:44 EDT 2014
Pedro Izecksohn wrote:
> The code available from:
> http://izecksohn.com/pedro/python/canvas/testing.py
> draws 2 horizontal lines on a Canvas. Why the 2 lines differ on thickness
> and length?
>
> The Canvas' method create_line turns on at least 2 pixels. But I want to
> turn on many single pixels on a Canvas. How should I do this? Canvas has
> no method create_pixel or create_point.
> #!/usr/bin/python3
>
> import tkinter as tk
>
> 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")
> 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):
> self.canvas.create_line (p.x, p.y, p.x, p.y, fill = color)
>
> 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()
I just tried your script, and over here the line drawn with
> def drawLine (self, pa, pb, color):
> self.canvas.create_line (pa.x, pa.y, pb.x, pb.y, fill = color)
has a width of 1 pixel and does not include the end point. Therefore the
"line" drawn with
> def drawPoint (self, p, color):
> self.canvas.create_line (p.x, p.y, p.x, p.y, fill = color)
does not show up at all. You could try to specify the line width explicitly:
def drawPoint (self, p, color):
self.canvas.create_line (p.x, p.y, p.x+1, p.y, fill=color, width=1)
If that doesn't work (or there's too much overhead) use pillow to prepare an
image and show that.
Another random idea: if you have a high resolution display your OS might
blow up everything. In that case there would be no fix on the application
level.
More information about the Python-list
mailing list