【发布时间】:2017-02-14 18:16:06
【问题描述】:
我想在Tkinter中画一个点,现在我用Canvas来做,但是我在Canvas类中没有找到这样的方法来画一个点。Canvas提供了一个叫做@的方法987654324@,所以我尝试设置x1=x2,y1=y2来画一个点,但它不起作用。
所以任何人都可以告诉我如何制作它,如果使用Canvas可以制作它会更好,其他解决方案也可以接受。谢谢!
【问题讨论】:
我想在Tkinter中画一个点,现在我用Canvas来做,但是我在Canvas类中没有找到这样的方法来画一个点。Canvas提供了一个叫做@的方法987654324@,所以我尝试设置x1=x2,y1=y2来画一个点,但它不起作用。
所以任何人都可以告诉我如何制作它,如果使用Canvas可以制作它会更好,其他解决方案也可以接受。谢谢!
【问题讨论】:
自从更新 Tk 库(介于 Tk 8.6.0 和 8.6.9 之间)后,create_line 的行为发生了变化。 要在 8.6.0 中在 (x, y) 处创建一个像素点,请添加到 write
canvas.create_line(x, y, x+1, y, fill=color)
现在在 8.6.9 上你必须使用:
canvas.create_line(x, y, x, y, fill=color)
请注意,Debian 9 使用 8.6.0,而 Archlinux(在 2019 年初)使用 8.6.9,因此几年后可移植性会受到影响。
【讨论】:
使用 create_line 您还有其他可能的解决方法:
canvas.create_line(x, y, x+1, y, fill="#ff0000")
它只覆盖一个像素(x,y 到红色)
【讨论】:
当我尝试在一行中放置几个像素的序列时,上面提供的解决方案似乎对我不起作用。
我找到了另一种解决方案——将椭圆的边框宽度减小到 0:
canvas.create_oval(x, y, x, y, width = 0, fill = 'white')
【讨论】:
没有办法直接在Canvas 上打一个点。下面的方法显示使用create_oval方法的点。
试试这个:
from Tkinter import *
canvas_width = 500
canvas_height = 150
def paint(event):
python_green = "#476042"
x1, y1 = (event.x - 1), (event.y - 1)
x2, y2 = (event.x + 1), (event.y + 1)
w.create_oval(x1, y1, x2, y2, fill=python_green)
master = Tk()
master.title("Points")
w = Canvas(master,
width=canvas_width,
height=canvas_height)
w.pack(expand=YES, fill=BOTH)
w.bind("<B1-Motion>", paint)
message = Label(master, text="Press and Drag the mouse to draw")
message.pack(side=BOTTOM)
mainloop()
【讨论】:
create_line不能和create_oval可以。
canvas.create_oval(x, y, x+1, y+1, fill={color})。