2017-12-27 361 views
0

我曾嘗試使用下面的代碼來繪製,在Tkinter的創建一個線上的點嘗試:如何用tkinter在鼠標座標後面畫一條線?

import tkinter as tk 
from time import sleep 

def myfunction(event): 
    x, y = event.x, event.y 
    x1 = (x+1) 
    y1 = (y+1) 
    canvas.create_line(x, y, x1, y1) 
    sleep(0.5) 



root = tk.Tk() 

canvas = tk.Canvas(root, width=400, height=400) 
canvas.pack() 

root.bind('d', myfunction) 


root.mainloop() 

理解的是,當我按下「D」的程序只繪製一個點。我曾嘗試使用myfunction函數中的循環,如下所示:

def myfunction(event): 
    x, y = event.x, event.y 
    x1 = (x+1) 
    y1 = (y+1) 
    for x in range(0,5): 
     canvas.create_line(x, y, x1, y1) 
     sleep(0.1) 

但這不起作用。我嘗試了許多其他解決方案,但似乎沒有任何工作。

有沒有解決這個問題的方法?

回答

3

首先,您必須綁定到"<Motion>"事件,每當鼠標移動時它都會觸發。

然後,您需要保存以前的鼠標座標,以便您有一個地方來畫線。

像這樣:

import tkinter as tk 

def myfunction(event): 
    x, y = event.x, event.y 
    if canvas.old_coords: 
     x1, y1 = canvas.old_coords 
     canvas.create_line(x, y, x1, y1) 
    canvas.old_coords = x, y 

root = tk.Tk() 

canvas = tk.Canvas(root, width=400, height=400) 
canvas.pack() 
canvas.old_coords = None 

root.bind('<Motion>', myfunction) 
root.mainloop() 
+0

謝謝,這有很大的幫助。 – 3141

1

基於Novel's answer可以進一步定義功能,當鼠標左鍵只按下,並進一步工作,定義一個函數用於繪製

import tkinter as tk 

def draw(event): 
    x, y = event.x, event.y 
    if canvas.old_coords: 
     x1, y1 = canvas.old_coords 
     canvas.create_line(x, y, x1, y1) 
    canvas.old_coords = x, y 

def draw_line(event): 

    if str(event.type) == 'ButtonPress': 
     canvas.old_coords = event.x, event.y 

    elif str(event.type) == 'ButtonRelease': 
     x, y = event.x, event.y 
     x1, y1 = canvas.old_coords 
     canvas.create_line(x, y, x1, y1) 

def reset_coords(event): 
    canvas.old_coords = None 

root = tk.Tk() 

canvas = tk.Canvas(root, width=400, height=400) 
canvas.pack() 
canvas.old_coords = None 

root.bind('<ButtonPress-1>', draw_line) 
root.bind('<ButtonRelease-1>', draw_line) 

#root.bind('<B1-Motion>', draw) 
#root.bind('<ButtonRelease-1>', reset_coords) 

root.mainloop() 
+1

非常感謝您爲此付出的時間和精力。 – 3141

+0

@ 3141 Np。我會進一步研究如何動態顯示行,例如ms paint如何做。 – Nae

+0

是的,這是我對這個項目的最終目標,也是爲了建立Python的知識。 – 3141