2016-08-10 2 views
1

Я пытаюсь сделать игру «Сапер». Для каждого недифференцированного квадрата я создал кнопку.Как связать несколько кнопок мыши с виджетами?

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), и на площади появляется цифра или мина.

Как я могу вызвать другую функцию при нажатии правой кнопки мыши на недифференцированном квадрате. Я хочу увидеть «М» на площади.

полный код: http://pastebin.com/cWGS4fBp

ответ

0

Нет ничего особенного, вам нужно просто привязать каждую кнопку мыши отдельно, а не использовать атрибут 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)) 
+0

Спасибо, он отлично работал. –

3

Вы должны связать ключи, которые вы хотите, чтобы получить эту функциональность. Вот простая концепция:

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) 

Сообщите нам, если это то, что вы ищете.

+0

У меня есть 9 * 9 = 81 кнопок без имен. список all_buttons с 81 кнопками, и они координируют (x, y). Я не знаю, как связать ключи с кнопками без имен. –

Смежные вопросы