2017-12-07 11 views
0

をクリックして上の図形を移動。クリックで図形を作成する方法を探して、私がしたいことは、私はボタンで希望形状の精度後クリックイベントに作成し、フォームを移動する方法です作成と、私はこれは私が知っているすべては、基本的なチュートリアルですキャンバスとTkinterのでの作業ちょっとこのプロジェクトは初めてで立ち往生君たち</p> <p>アムはあまりにも愚かではないことを願うTkinterのキャンバス

(ポジショニングを更新)

from tkinter import * 
from tkinter import messagebox 
def Click(event) : 
    can.coords(cercle, event.x, event.y, event.x+10, event.y+10) 
def Rectangle() : 
    can.create_rectangle(10, 10, 70, 70, fill='white', outline='blue', width=3) 
def Delete() : 
     msg = messagebox.askyesnocancel('Info','Delete canevas ?') 
     if msg == None : 
     return 
     elif msg == True : 
     can.delete(ALL) 
def Line(): 
     can.create_line(200,200,100,100,fill='red', width=5) 

def Cercle(): 
     can.create_oval(10, 10, 70, 70, fill='orange', outline='blue') 

fenetre = Tk() 
fenetre.title('Dessin des objets') 
fenetre.resizable(width=False,height=False) 
fenetre.geometry('400x200+100+50') 
fenetre.configure(bg = 'light green') 
can = Canvas(fenetre, bg='white', height=300, width=300) 
can.pack(side = RIGHT) 
btnLine = Button(fenetre,text='Line',width=30,command=Line) 
btnLine.pack() 
btnRectangle = Button(fenetre,text='Rectangle',width=30,command=Rectangle) 
btnRectangle.pack() 
btnDelete = Button(fenetre, text='Effacer', width=30,command=Effacer) 
btnDelete.pack() 

btnCercle = Button(fenetre,text='Cercle',width=30,command=Cercle) 
btnCercle.pack() 
can.bind("<Button-1>", Click) 

can.pack(side = RIGHT) 
cercle = can.create_oval(10, 10, 10+10, 10+10, fill = 'orange', outline = 'gold') 
fenetre.mainloop() 

アムボタンをクリックした後、私はこのコードで道を離れることを理解し始めました。ここ 私は enter image description here

やったことの写真です事前に感謝

+0

あなたがそれを維持するために、グローバル変数を使用しますButtonとthで形状を設定したいクリックして形状を配置しますか?現在のシェイプを保持する変数が必要です。 – Novel

+0

作成された図形の位置を更新し、それらを線でリンクし、すべてをすべて一緒に移動したいだけではありません。私にとってこれは初めての試みです。私は何をする必要がありますか? with tkinter –

+0

私はあなたのプログラムで何をしたいのか全く分からないのではないかと心配しています。 – Novel

答えて

1

create_oval()および他の方法は、あなたがこのオブジェクトの操作に使用することができますobject ID

object_id = can.create_oval(..) 

を返します。 effbot.org上

can.move(object_id, offset_x, offset_y) 

can.coords(object_id, (new_x, new_y)) 

より:Canvas

あなたが関数内でオブジェクトを作成する場合は、

def Cercle(): 
    global object_id 

    object_id = can.create_oval(10, 10, 70, 70, fill='orange', outline='blue') 

def Click(event) : 
    can.coords(object_id, event.x, event.y, event.x+10, event.y+10) 

の作業例

import tkinter as tk 

from tkinter import messagebox 

def click(event): 
    if object_id is not None: 
     coord = can.coords(object_id) 
     width = coord[2] - coord[0] 
     height = coord[3] - coord[1] 

     can.coords(object_id, event.x, event.y, event.x+width, event.y+height) 

def delete(): 
    msg = messagebox.askyesnocancel('Info', 'Delete canvas ?') 
    if msg == True: 
     can.delete(tk.ALL) 

def create_rectangle(): 
    global object_id 

    object_id = can.create_rectangle(10, 10, 70, 70, fill='white', outline='blue', width=3) 


def create_line(): 
    global object_id 

    object_id = can.create_line(200, 200, 100, 100, fill='red', width=5) 

def create_circle(): 
    global object_id 

    object_id = can.create_oval(10, 10, 70, 70, fill='orange', outline='blue') 

# --- main --- 

object_id = None 

fenetre = tk.Tk() 
fenetre.title('Dessin des objets') 
fenetre.resizable(width=False, height=False) 
fenetre.geometry('400x200+100+50') 
fenetre.configure(bg='light green') 

can = tk.Canvas(fenetre, bg='white', height=300, width=300) 
can.pack(side=tk.RIGHT) 
can.bind("<Button-1>", click) 

btn_line = tk.Button(fenetre, text='Line', width=30, command=create_line) 
btn_line.pack() 

btn_rectangle = tk.Button(fenetre, text='Rectangle', width=30, command=create_rectangle) 
btn_rectangle.pack() 

btn_circle = tk.Button(fenetre, text='Circle', width=30, command=create_circle) 
btn_circle.pack() 

btn_delete = tk.Button(fenetre, text='Delete', width=30, command=delete) 
btn_delete.pack() 

fenetre.mainloop() 
+0

okkありがとう、私は今どこに行くのが分かるか –

+0

実例を追加しました。 – furas

関連する問題