我有一个按钮网格(10X10)。我想在按钮上生成一个鼠标拖动事件,所有选定的按钮都应显示为红色。我在Python中使用Tkinter GUI。如果可能,应将所选按钮限制为选择第一个按钮的同一行。
for x in range(10):
temp_buttons = []
for y in range(10):
b = tk.Button(player1Frame,text=" ",height=2, width=3,padx=8,pady=8)
b.bind('<Button-3>', onRightClick)
b.bind('<Button-1>',onClick)
b.grid(row=x, column=y)
temp_buttons.append(b)
y = y + w
x=x+w
y=0
player1Buttons.append(temp_buttons)
player1Frame.pack(side = LEFT)
我用于生成网格的代码。
要管理拖动,您需要绑定到事件<B1-Motion>
。事件的回调包括表示事件的对象。该对象的属性之一是对接收事件的小组件的引用。
使用您发布的代码查看这一点的一种简单方法是将行和列添加为小部件上的属性。然后,可以在事件处理程序中打印出该行和列。
首先,为小部件分配一个属性:
b.location = (x,y)
接下来,创建一个打印位置的回调:
def onDrag(event):
button = event.widget
print("dragging row %s column %s" % button.location)
最后,添加绑定:
b.bind("<B1-Motion>", onDrag)