2017-02-15 4 views
0

こんにちは私は、ボタンをクリックして宝物かどうかを示すゲームを作成しようとしています。それが宝であれば、あなたはあなたのコインを失った山賊であればポイントを得ることができます。 次のコードを作成しましたが、配列に格納された値にボタンを設定しているかどうかを調べる方法が見つかりません。 どのように配列内のデータを使用し、ボタンがクリックされたときにその値が何かを示します。 配列を正しくしていますが、私は円で回っていて、すぐに考えることができません。ランダムに設定された配列の値をtkinterボタンに割り当てるときの問題

from tkinter import * 
import tkinter.messagebox 
import random 

#count=0 

root = Tk() 
TreasureMap = Frame(root) 
TreasureMap.grid() 

root.title("TreasureMap") 
text_box = Entry(TreasureMap, justify=RIGHT) 

text_box.grid(row = 0, column = 0, columnspan = 8,) 
text_box.insert(0, "0") 

amount_to_add='B' 
my_array = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],  
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0], 
[0,0,0,0,0,0,0,0]] 
my_array[random.randrange(len(my_array))].append(amount_to_add) 
my_array[random.randrange(len(my_array))].append(amount_to_add) 
my_array[random.randrange(len(my_array))].append(amount_to_add) 
my_array[random.randrange(len(my_array))].append(amount_to_add) 

Treasure='T' 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure)  
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 
my_array[random.randrange(len(my_array))].append(Treasure) 


print(my_array) 


def changelabel(): ` 
     tkinter.messagebox.showinfo('Hellow this button works') `` 
     print('hello this button works') ` `` 
     print(my_array) `` `` 
     return 



i = 0 
bttn = [] 
for j in range(1,9):`  
    for k in range(8): ``  
    bttn.append(Button(TreasureMap, text = ' ', value=random.shuffle  
    (my_array),command=changelabel))  
    bttn[i].grid(row = j, column = k)   
    i += 1 ``  


TreasureMap.mainloop() 

答えて

0

これはあなたがしたいことかもしれません。
this answerの情報を借用して、私はcallbackをButtonコマンドに入れ、行番号と列番号を渡します。
また、配列内の場所に割り当てるのではなく、0の各配列に 'B'と 'T'が追加されています。これはあなたの望むものです。
は、私は、これはあなたが求めていた何をしていない場合

# previous code 

amount_to_add='B' 
my_array = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],  
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0], 
[0,0,0,0,0,0,0,0]] 

# ... all code up to here unchanged ... 

for _ in range(4): 
    my_array[random.randrange(len(my_array))][random.randrange(len(my_array))] = amount_to_add 

Treasure='T' 
for _ in range(4): 
    my_array[random.randrange(len(my_array))][random.randrange(len(my_array))] = Treasure 

# print my_array # uncomment to check array values before shuffle 
random.shuffle(my_array) 
# print my_array # and after shuffle to confirm button is getting the correct values 

def changelabel(j,k): 
    tkinter.messagebox.showinfo('Button %d,%d' % (j,k), 'Button %d,%d contains a %s' % (j,k, my_array[j][k])) 
     print('hello this button works') 
     # return # not needed 

i = 0 
bttn = [] 

for j in range(0,8): 
    for k in range(8): 
     bttn.append(Button(TreasureMap, text = ' ', command= lambda row = j, column = k: changelabel(row, column))) 
     bttn[i].grid(row = j, column = k)   
     i += 1 

コメントや質問をお気軽になど、0(最初の行)から開始するforループを固定を含め、他のいくつかの変更を行いましたために。それ以外の場合は、助けてください。

+0

コマンド=ラムダ行= j、列= k:このコードではchangelabel(行、列)は何ですか? –

+0

コマンドは、使用したのと同じようにボタンに渡される引数です。しかし、ボタンが呼び出された行/列を知るためのパラメータを 'changelabel'に含めることも必要です。 [コールバックは、関数、バインドされたメソッド、または他の呼び出し可能なPythonオブジェクト](http://effbot.org/tkinterbook/button.htm#Tkinter.Button.config-method)です。ここで、 'changelabel' *はその関数です*およびλ(http://www.secnetix.de/olli/Python/lambda_functions.hawk)は、実行時に 'changelabel'に渡すパラメータとして' j'と 'k'を割り当てます – davedwards

関連する問題