2017-02-26 1 views
1
for i in range(random.randint(1,4)): 
    xos=[150,200,250,300,350,400,450,500,550,600,650,700,750,800,850] 
    yos=[150,200,250,300,350,400,450,500,550,600,650] 
    xos_=random.choice(xos) 
    yos_=random.choice(yos) 
    object=canvas.create_image(xos_,yos_,image=postava) 
    read_=read.replace("[","").replace("]","").replace("'","").replace("\\n","").replace("\\","") 
    loot.write(read_+"\n") 

私はFORでキャンバスに画像を作成していますし、私は が必要ですが、最後のものだけが、私が入力するときに、タグ(名前)を目的としているときにそれらを削除したいです最後のものだけを削除します。だから私はそれが特定の位置(名前/タグではない)にあるオブジェクトを削除する可能性があるかどうかを知りたい。私は座標だけを知っているとき、どのようにオブジェクトをtkinterキャンバス上に移動できますか?</strong>それを<strong>canvas.delete(オブジェクト):

+0

あなたのタイトルでは、あなたの質問にキャンバスオブジェクトを破棄/削除するように頼んだので、あなたは "move"を "remove"に置き換えるべきです。 –

答えて

0

シナリオ(A)クリックしたときにキャンバスオブジェクトを識別するためにマウスの左ボタンを使用し、マウスの左ボタンが離されたときにオブジェクトを削除するとします。

手順1:オブジェクトを削除するためにButton-1にバインドするために使用するコールバック/メソッドに、これらのコマンドを含めます。

mx = canvas.canvasx(event.x) #Translate mouse x screen coordinate to canvas coordinate 
my = canvas.canvasy(event.y) #Translate mouse y screen coordinate to canvas coordinate 
self.canvasobject = canvas.find_closest(mx, my, halo=5) # get canvas object ID of where mouse pointer is 
print(self.canvasobject) #For you to visualize the canvas object number 

ステップ2:は、あなたがオブジェクトを削除するButtonRelease-1にバインドするために使用するコールバック/メソッドにこれらのコマンドを含めます。

canvas.delete(self.canvasobject) #delete the selected canvas object 

シナリオ(B):はy座標、すでにオブジェクトのキャンバスxを知っていると仮定し、あなたはキャンバスオブジェクトを削除するには、単一のコマンドを発行することができます

canvas.delete(canvas.find_closest(x, y, halo=5)) 

説明については、このwebpageを参照してください。私が使用したキャンバスメソッドと他のキャンバスメソッドに使用します。

+0

ありがとうございます:) –

1

座標(coord)がわかっている場合、キャンバス上のオブジェクトを削除することは可能です。

注:オブジェクト上の1つだけのポイントを知っていれば、その代わりにcanvas.find_overlapping(x1, y1, x2, y2)

canvas.find_overlapping(x, y, x, y)を使用し、その後、以下の canvas.delete(item)

を参照してくださいサンプルコードを使用してそれを削除し、その位置にオブジェクトを見つけるためにitem = canvas.find_overlapping(coord)を使用して、

import Tkinter as tk 
import random 


root = tk.Tk() 
canvas = tk.Canvas(root, width=550, height=500, borderwidth=0) 
canvas.pack(expand=True, fill="both") 

coord_list=[] 

for i in range(random.randint(1,4)): 
    xos=[150,200,250,300,350,400,450,500] 
    yos=[150,200,250,300,350,400,450] 
    xos_=random.choice(xos) 
    yos_=random.choice(yos) 

    coord = (xos_,yos_,xos_+50,yos_+50) 
    coord_list.append(coord) 
    objectt=canvas.create_rectangle(coord, fill="blue") 
canvas.create_rectangle(25, 15, 50, 40, fill="red") 

# Delete red rectangle 
def delete1(event): 
    item = canvas.find_overlapping(25, 15, 50, 40) 
    canvas.delete(item) 

# Delete blue rectangles 
def delete2(event): 
    for coord in coord_list: 
     item = canvas.find_overlapping(*coord) 
     canvas.delete(item) 

#Click on the canvas to delete objects at the coordinates 
canvas.bind("<Button-1>", delete1) # change function to delete blue rectangles 
root.mainloop() 
関連する問題

 関連する問題