当前位置: 代码迷 >> python >> 从随机填充的数组向tkinter按钮分配值时出现问题
  详细解决方案

从随机填充的数组向tkinter按钮分配值时出现问题

热度:83   发布时间:2023-06-16 10:11:45.0

您好,我正在尝试创建一个游戏,您单击一个按钮,它会告诉您它是宝还是土匪。 如果它是宝藏,那么如果它是土匪,则您将获得积分。 我已经创建了以下代码,但是无法找到一种方法来确定是否已将按钮设置为存储在数组中的值。 如何使用数组中的数据,以及单击按钮时,它将告诉您该值是什么。 如果我正确地做阵列,任何帮助将不胜感激。

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()  

这可能就是您想要做的。
从借用信息,我在Button命令中添加了以传递行号和列号。
另外,“ B”和“ T”被附加到每个0数组中,而不是分配给数组中的位置,这就是我想要的。
我进行了其他一些更改,包括将for循环从0 (第一行)开始固定,等等。

# 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

如果这不符合您的要求,请随时发表评论或提出问题。 否则,希望对您有所帮助。

  相关解决方案