Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #73237
| References | <1402538245.73470.YahooMailNeo@web140102.mail.bf1.yahoo.com> <lnbjak$p92$1@ger.gmane.org> |
|---|---|
| Date | 2014-06-12 13:17 -0700 |
| From | Pedro Izecksohn <izecksohn@yahoo.com> |
| Subject | Re: Lines on a tkinter.Canvas |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.11042.1402604922.18130.python-list@python.org> (permalink) |
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.
>
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Lines on a tkinter.Canvas Pedro Izecksohn <izecksohn@yahoo.com> - 2014-06-12 13:17 -0700
csiph-web