2017-03-03 7 views
0

ここでは、ユーザがポイントをクリックしてポイントを描き、その後のクリックが前のラインに追加されたより多くのラインを描画するプログラムのコードを示します。 (xp1、yp1)とxp2(xp1、yp1)の間に線を描くように、このプログラムを編集すると、 、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

ああ申し訳ありませんが私の質問に間違った言葉を2点をクリックして、それらの間に線を描きたいのですが?クリックしてドラッグアンドリリースしない...クリアは素晴らしい仕事、ありがとう –

関連する問題