Python tkinter画布动态Create.Line
我想要做的是让用户点击画布上的某个地方,然后点击其他地方,并在两点之间画一条直线。我是TKinter的新手,经过一些Google搜索和搜索后,我无法找到一个坚实的答案。Python tkinter画布动态Create.Line
我一直在想它的方式,应该有一个onclick事件,它在画布上传递鼠标坐标,然后在画布上传递这些坐标的onrelease事件,从而在它们之间创建一条线。这条线必须是一个对象,我可以通过另一个按钮在某个时候删除,但这是一个单独的问题。
任何帮助将不胜感激,甚至文章/教程的任何链接,也可以帮助
你必须做的唯一的事情是结合"<Button-1>"
和"<ButtonRelease-1>"
到画布:
from Tkinter import Tk, Canvas
start = None
def onclick_handler(event):
global start
start = (event.x, event.y)
def onrelease_handler(event):
global start
if start is not None:
x = start[0]
y = start[1]
event.widget.create_line(x, y, event.x, event.y)
start = None
master = Tk()
canvas = Canvas(master, width=200, height=200)
canvas.bind("<Button-1>", onclick_handler)
canvas.bind("<ButtonRelease-1>", onrelease_handler)
canvas.pack()
master.mainloop()
我不喜欢使用全局变量,它将所有小部件和相关函数封装在一个类中更加清晰。但是,作为一个例子,我认为这是很清楚的。
看起来很漂亮,对我来说是明智之举。
这里只是检查画布的文档: http://effbot.org/tkinterbook/canvas.htm
而且这里的事件: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
而且他们,只需键入像这样的代码 - 类甚至比一个sinple更复杂你好世界 - 两个全局变量会做简单的代码:
from Tkinter import Canvas, Tk, mainloop
w = Tk()
c = Canvas(w)
c.pack()
class DrawLines(object):
def __init__(self, canvas):
self.canvas = canvas
self.start_coords = None
self.end_coords = None
def __call__(self, event):
coords = event.x, event.y
if not self.start_coords:
self.start_coords = coords
return
self.end_coords = coords
self.canvas.create_line(self.start_coords[0],
self.start_coords[1],
self.end_coords[0],
self.end_coords[1])
self.start_coords = self.end_coords
c.bind("<Button-1>", DrawLines(c))
mainloop()
这两个答案都非常有帮助,但这更接近我如何设置我的程序。感谢您的链接! – user2103768 2013-02-26 15:54:35
非常明确,谢谢! – user2103768 2013-02-26 15:54:52
我把这个标记为正确的答案,因为我采取了这种方法,我只是将它包装在课程中,我已经建立了,因此没有全局变量 – user2103768 2013-02-27 15:16:11