2016-08-10 3 views
1

私はMinesweeperゲームを作ろうとしています。未分化の四角形ごとにボタンを作成しました。私は未分化の正方形の上でマウスの左ボタンを押すと複数のマウスボタンをウィジェットにバインドする方法は?

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

答えて

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個のボタンがあります。 81ボタンでall_buttonsをリストし、(x、y)を座標合わせします。名前のないボタンにキーをバインドする方法がわかりません。 –

関連する問題