拖动事件时,所有选定的按钮都应使用Tkinter Python着色
我有一个按钮网格(10X10)。我想在按钮上生成一个鼠标拖动事件,所有选中的按钮都应该被涂成红色。我正在Python中使用TkinterGUI。如果可能,所选按钮应限制在选择第一个按钮的同一行拖动事件时,所有选定的按钮都应使用Tkinter Python着色,python,python-3.x,events,tkinter,Python,Python 3.x,Events,Tkinter,我有一个按钮网格(10X10)。我想在按钮上生成一个鼠标拖动事件,所有选中的按钮都应该被涂成红色。我正在Python中使用TkinterGUI。如果可能,所选按钮应限制在选择第一个按钮的同一行 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.
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)
范围(10)内x的:
临时按钮=[]
对于范围(10)内的y:
b=tk.按钮(player1Frame,text=”“,高度=2,宽度=3,padx=8,pady=8)
b、 绑定(“”,右键单击)
b、 绑定(“”,onClick)
b、 网格(行=x,列=y)
临时按钮。附加(b)
y=y+w
x=x+w
y=0
Player1按钮。附加(临时按钮)
播放器1框架组件(侧面=左侧)
我的生成网格的代码。要管理拖动,需要绑定到事件
。事件的回调包含一个表示事件的对象。该对象的属性之一是对接收事件的小部件的引用
使用您发布的代码,一个简单的方法是在小部件上添加行和列作为属性。然后可以在事件处理程序中打印出该行和列
首先,为小部件分配一个属性:
b.location = (x,y)
接下来,创建一个打印位置的回调:
def onDrag(event):
button = event.widget
print("dragging row %s column %s" % button.location)
最后,添加绑定:
b.bind("<B1-Motion>", onDrag)
b.bind(“,onDrag)
任何答案都会很有帮助。您所说的“生成鼠标拖动事件”是什么意思?您希望代码生成事件,还是询问如何响应事件?生成事件是非常不寻常的,尤其是拖动事件。无论如何,在你的代码中,我看不到你试图用拖动事件做任何事情。你尝试过什么?不,用户会在按钮上生成拖动事件,我不知道在onDrag函数中要写什么,所以我没有在代码中提到它。我可以在单击时获得鼠标坐标,但我如何知道我单击了哪个按钮并开始拖动。您可以在bind()
或command=
中使用lambda
来分配带参数的函数。但是bind()
执行带有参数event
的函数,该参数允许您访问event.widget
-即def onRightClick(event):print(event.widget,event.widget['text'))
如果您创建了一个。虽然只有开始拖动的第一个按钮而不是所有按钮变为颜色,但这会有所帮助。@kingforever:这是因为您只告诉一个按钮不同的颜色。特金特看不懂你的心思。我把给每个按钮上色的代码放在哪里?目前我把它放在onDrag功能下,这就是为什么只有那个按钮的颜色不同。我应该为鼠标位置更改生成一个新事件,还是可以以不同的方式处理它?@kingforever:将代码添加到你想要的任何地方。在onDrag
中调用该代码。就这么简单。