Lines on a tkinter.Canvas
Pedro Izecksohn
izecksohn at yahoo.com
Thu Jun 12 16:17:48 EDT 2014
As Peter Otten did not see the same result that I saw, I prepared an image that shows the result on my notebook:
http://izecksohn.com/pedro/python/canvas/tk_window.xcf
For those that might not know: xcf is the Gimp's file format.
----- Original Message -----
> From: Peter Otten
> To: python-list at python.org
> Sent: Thursday, June 12, 2014 4:02 AM
> Subject: Re: Lines on a tkinter.Canvas
>
> 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