私はちょうどマウスでtkinterキャンバスに四角形を作成する方法を書いたサンプルコードを提供しています。これにより、必要な手順と方法を理解するのに役立ちます。その後、あなたの特定の問題に適応させてください。これがあなたのお手伝いをしてくれることを願っています。
例コード:ユーザーがマウスで矩形オブジェクトを描画できるtkinterキャンバスを作成する方法。
import tkinter as tk
class App(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self._createVariables(parent)
self._createCanvas()
self._createCanvasBinding()
def _createVariables(self, parent):
self.parent = parent
self.rectx0 = 0
self.recty0 = 0
self.rectx1 = 0
self.recty1 = 0
self.rectid = None
self.move = False
def _createCanvas(self):
self.canvas = tk.Canvas(self.parent, width = 800, height = 400,
bg = "white")
self.canvas.grid(row=0, column=0, sticky='nsew')
def _createCanvasBinding(self):
self.canvas.bind("<Button-1>", self.startRect)
self.canvas.bind("<ButtonRelease-1>", self.stopRect)
self.canvas.bind("<Motion>", self.movingRect)
def startRect(self, event):
self.move = True
#Translate mouse screen x0,y0 coordinates to canvas coordinates
self.rectx0 = self.canvas.canvasx(event.x)
self.recty0 = self.canvas.canvasy(event.y)
#Create rectangle
self.rect = self.canvas.create_rectangle(
self.rectx0, self.recty0, self.rectx0, self.recty0, fill="#4eccde")
#Get rectangle's canvas object ID
self.rectid = self.canvas.find_closest(self.rectx0, self.recty0, halo=2)
print('Rectangle {0} started at {1} {2} {3} {4} '.
format(self.rect, self.rectx0, self.recty0, self.rectx0,
self.recty0))
def movingRect(self, event):
if self.move:
#Translate mouse screen x1,y1 coordinates to canvas coordinates
self.rectx1 = self.canvas.canvasx(event.x)
self.recty1 = self.canvas.canvasy(event.y)
#Modify rectangle x1, y1 coordinates
self.canvas.coords(self.rectid, self.rectx0, self.recty0,
self.rectx1, self.recty1)
print('Rectangle x1, y1 = ', self.rectx1, self.recty1)
def stopRect(self, event):
self.move = False
#Translate mouse screen x1,y1 coordinates to canvas coordinates
self.rectx1 = self.canvas.canvasx(event.x)
self.recty1 = self.canvas.canvasy(event.y)
#Modify rectangle x1, y1 coordinates (final)
self.canvas.coords(self.rectid, self.rectx0, self.recty0,
self.rectx1, self.recty1)
print('Rectangle ended')
if __name__ == "__main__":
root = tk.Tk()
root.geometry("600x400")
app = App(root)
root.mainloop()
使用するステップと方法の概要:
tk.Canvas()
方法tk.Canvas
ウィジェットへのコールバックと
- バインドマウスイベント
<Button-1>
、<ButtonRelease-1>
と<Motion>
を使用してTk()
ウィンドウ内のキャンバスウィジェットを作成します。
- これらのイベントのそれぞれについて:
3.1マウスステータス変数、つまりself.moveを更新またはチェックします。
3.2変換マウスポインタ画面x、yはキャンバスに座標の方法.canvasx(event.x)
と.canvasy(event.y)
変数self.rectx0
、self.recty0
、self.rectx1
、self.recty1
におけるこれらの変換corrdinatesを保存を使用して調整します。 event.x
およびevent.y
は、マウスポインタの画面座標を提供します。
3.3キャンバスメソッド.create_rectangle(x0, y0, x1, y1, option, ...)
を使用して矩形を作成するか、キャンバスメソッド.coords(tagOrId, x0, y0, x1, y1)
を使用して矩形座標を変更します。ここで、x0
,y0
,x1
,y1
は、矩形オブジェクトの左上角および右下角x & yキャンバス座標を示し、tagOrId
を矩形オブジェクトIDとする。
3.4 <Button-1>
の場合のみ、作成した矩形オブジェクトのIDを変数に格納する必要があります。この変数は、<Motion>
と<ButtonRelease-1>
の間に.coords() method
が呼び出されるたびにtagOrIdに値を提供します。
あなたが何を求めているのか分かりません。あなたがしなければならないことは、四角形の1つのコーナーのx座標またはy座標に少し余分に追加するだけで、四角形を描くことがわかりますか? –
イメージを挿入しようとしましたが、私も許可されません。私はさまざまな形や大きさでそれらを描くことができるようにしたい。私が何をしても四角形として描きます。私が使用しているコードは私が作成したものではありませんでした。私はちょうどそれがサークルではなく四角形を使用するように修正していました。 – Kkheartsmak
長方形や画像についてご質問ですか?スクエアの一角の座標を変更しようとしましたか? –