Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拖动事件时,所有选定的按钮都应使用Tkinter Python着色_Python_Python 3.x_Events_Tkinter - Fatal编程技术网

拖动事件时,所有选定的按钮都应使用Tkinter Python着色

拖动事件时,所有选定的按钮都应使用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.

我有一个按钮网格(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.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
中调用该代码。就这么简单。