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@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. > -- https://mail.python.org/mailman/listinfo/python-list