了解bbox
让我们在这里使用这段代码:
import tkinter as tk
def do_bbx(event):
item_id = event.widget.find_withtag('current')[0]
crds = event.widget.coords(item_id)
print(f'{item_id} was clicked')
print(f'bbox returns, {bbx}')
print(f'coords returns, {crds}')
root = tk.Tk()
c = tk.Canvas(root,width=250,height=250)
f = c.create_rectangle(10,20, 50, 50,
fill = "BLUE")
sec = c.create_rectangle(30,30, 80, 80,
fill = "GREEN")
bbx = c.bbox(f, sec)
c.tag_bind('all', "<Button-1>", do_bbx)
c.pack()
root.mainloop()
然后运行这个返回到这个:
如果您点击蓝色矩形,将打印出以下内容:
1 was clicked
bbox returns, (9, 19, 81, 81)
coords returns, [10.0, 20.0, 50.0, 50.0]
点击绿色时会打印:
2 was clicked
bbox returns, (9, 19, 81, 81)
coords returns, [30.0, 30.0, 80.0, 80.0]
所以 bbox 只是静默,然后比较坐标值并返回给我们一个列表。喜欢:
import tkinter as tk
def rectangel_us(canvas, *items):
coords = {"x1":[],"y1":[],"x2":[],"y2":[]}
for i in items:
coords['x1'].append(canvas.coords(i)[0])
coords['y1'].append(canvas.coords(i)[1])
coords['x2'].append(canvas.coords(i)[2])
coords['y2'].append(canvas.coords(i)[3])
x1 = min(coords['x1'])-1
y1 = min(coords['y1'])-1
x2 = max(coords['x2'])+1
y2 = max(coords['y2'])+1
return[x1,y1,x2,y2]
root = tk.Tk()
c = tk.Canvas(root,width=250,height=250)
f = c.create_rectangle(10,20, 50, 50,
fill = "BLUE")
sec = c.create_rectangle(30,30, 80, 80,
fill = "GREEN")
bbx = rectangel_us(c, f, sec)
print(bbx)
c.pack()
root.mainloop()
打印出来的 bbx 将是:
[9.0, 19.0, 81.0, 81.0]
我们从上面知道。
这可以通过这里的代码看到:
import tkinter as tk
def rectangel_us(canvas, *items):
coords = {"x1":[],"y1":[],"x2":[],"y2":[]}
for i in items:
coords['x1'].append(canvas.coords(i)[0])
coords['y1'].append(canvas.coords(i)[1])
coords['x2'].append(canvas.coords(i)[2])
coords['y2'].append(canvas.coords(i)[3])
x1 = min(coords['x1'])-1
y1 = min(coords['y1'])-1
x2 = max(coords['x2'])+1
y2 = max(coords['y2'])+1
canvas.create_rectangle(x1,y1,x2,y2,
outline='red')
root = tk.Tk()
c = tk.Canvas(root,width=250,height=250)
f = c.create_rectangle(10,20, 50, 50,
fill = "BLUE")
sec = c.create_rectangle(30,30, 80, 80,
fill = "GREEN")
bbx = rectangel_us(c, f, sec)
c.pack()
root.mainloop()
结果如下: