如何将多个鼠标按钮绑定到一个小部件?

2024-04-23 11:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做扫雷游戏。我为每个未区分的正方形创建了一个按钮。你知道吗

my_list = [[0 for i in range(9)] for j in range(9)]

all_buttons = []


def creaMatriz():
    for y, row in enumerate(my_list):
        buttons_row = [] 
        for x, element in enumerate(row):
            boton2 = Button(root, text="", width=6, height=3, command=lambda a=x, b=y: onButtonPressed(a, b))
            boton2.grid(row=y, column=x)
            buttons_row.append(boton2)
        all_buttons.append(buttons_row)


def onButtonPressed(x, y):
    all_buttons[y][x]['text'] = str(qwer[x][y]) # Some action!!!
....

当我在一个未区分的正方形上按鼠标左键时,我调用函数onButtonPressed(x, y),一个数字或一个地雷出现在正方形上。你知道吗

在未区分的正方形上按鼠标右键时,如何调用另一个函数。我想看看广场上的“M”。

完整代码:http://pastebin.com/cWGS4fBp


Tags: textinformydefrangealllist
2条回答

您需要绑定所需的密钥才能获得此功能。这里有一个简单的概念:

from tkinter import *

root = Tk()

def left(event):
    label.config(text="Left clicked")

def right(event):
    label.config(text="Right clicked")

label = Label(root, text="Nothing")
label.pack()

label.focus_set()
label.bind("<1>", left)
label.bind("<3>", right)

让我们知道这是否是你要找的。你知道吗

您不需要做什么特别的事情,只需要分别绑定每个鼠标按钮,而不是使用command属性。你知道吗

例如,让我们为鼠标左键和右键创建一个回调:

def onLeftClick(x, y):
    print("you clicked on %x,%y" % (x, y))

def onRightClick(x, y):
    print("you clicked on %x,%y" % (x, y))

接下来,我们可以使用bind方法分别绑定到这些函数中的每一个。因为我们正在添加自定义绑定,所以我们不想设置按钮的command属性。你知道吗

def creaMatriz():
    for y, row in enumerate(my_list):
        buttons_row = [] 
        for x, element in enumerate(row):
            button = Button(root, text="", width=6, height=3)
            ...
            button.bind("<1>", lambda event, x=x, y=y: onLeftClick(x,y))
            button.bind("<3>", lambda event, x=x, y=y: onRightClick(x,y))

相关问题 更多 >