2017-03-03 87 views
0

因此,這裏是一個程序的代碼,用戶可以點擊一個點,然後繪製一個點,然後再點擊繪製更多的線,所有線都附加到前一行。我將如何編輯這個程序,讓用戶按下按鈕,並有像(xp1,yp1),然後拖動一些地方,並釋放在(xp2,yp2),然後畫(xp1,yp1)和(xp2 ,yp2)。最後,它會讓用戶創建許多不同的線條,然後最終能夠按「c」鍵清除畫布屏幕。就像我知道的最後一件事將不得不將一些功能綁定到「c」,但我不知道它是什麼。非連續線條用戶繪製tkinter python

from Tkinter import Canvas, Tk, mainloop 
import Tkinter as tk 

# Image dimensions 
w,h = 640,480 

# Create canvas 
root = Tk() 
canvas = Canvas(root, width = w, height = h, bg = 'white') 
canvas.pack() 

# Create poly line 
class PolyLine(object): 
    def __init__(x, canvas): 
     x.canvas = canvas 
     x.start_coords = None # first click 
     x.end_coords = None # subsequent clicks 
    def __call__(x, event): 
     coords = event.x, event.y # coordinates of the click 
     if not x.start_coords: 
      x.start_coords = coords 
      return 
     x.end_coords = coords # last click 
     x.canvas.create_line(x.start_coords[0], # first dot x 
           x.start_coords[1], # first dot y 
           x.end_coords[0], # next location x 
           x.end_coords[1]) # next location y 
     x.start_coords = x.end_coords 

canvas.bind("<Button-1>", PolyLine(canvas)) # left click is used 
mainloop() 

非常感謝您的時間!對此,我真的非常感激!

回答

1
import tkinter as tk 
from time import sleep 

def getpoint1(event): 
    global x, y 
    x, y = event.x, event.y 

def getpoint2(event): 
    global x1, y1 
    x1, y1 = event.x, event.y 

def drawline(event): 
    canvas.create_line(x, y, x1, y1) 



root = tk.Tk() 

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

root.bind('q', getpoint1) 
root.bind('w', getpoint2) 
root.bind('<Button-1>', drawline) 


root.mainloop() 

這是相當多的,你問什麼,您的評論,但使用不同的密鑰。

1

對於繪圖線部分,我使用全局列表變量來存儲線條點。如果列表爲空,那麼我在列表中存儲行起點座標。否則,我畫出起點和當前光標位置之間的界限,然後重置列表。

對於結算部分,您需要將canvas.delete方法綁定到「c」鍵按下。

from Tkinter import Canvas, Tk 

line = [] 

def on_click(event): 
    global line 
    if len(line) == 2: 
     # starting point has been defined 
     line.extend([event.x, event.y]) 
     canvas.create_line(*line) 
     line = [] # reset variable 
    else: 
     # define line starting point 
     line = [event.x, event.y] 

def clear_canvas(event): 
    canvas.delete('all') 

root = Tk() 
canvas = Canvas(root, bg='white') 
canvas.pack() 

canvas.bind("<Button-1>", on_click) 
root.bind("<Key-c>", clear_canvas) 

root.mainloop() 
+0

對不起,我錯誤地提出了我的問題,如果我想點擊兩點並在它們之間畫一條線,該怎麼辦?不要點擊拖動並釋放...清晰的工作太棒了,謝謝 –