我想做一个记忆游戏。这就是我目前所拥有的。我如何解决这个问题?如果有任何提示可以帮助你使用Tkinter制作记忆游戏,那将不胜感激
我的代码:
from tkinter import *
from tkinter import messagebox
import time
import random
difficulty = 16
rowsize= 4
columnsize = 4
numcount = 0
lastnum = 0
gotitcorrect = False
root = Tk()
root.title("MEMORY GAME!!")
root.configure(bg='gray')
def GameStart():
menuFrame.pack_forget()
gameFrame.pack()
def Timer(tim):
time.sleep(tim)
def GetRandomNumber():
lst1 = [i for i in range(1,9)]
lst2 = [i for i in range(1,9)]
random.shuffle(lst1),random.shuffle(lst2)
numlst = lst1+lst2
return numlst
def WrongOrRight(card, number):
if numcount == 0:
lastnum = number
numcount+=1
card.configure(text=str(number))
elif numcount == 1:
if number == lastnum:
gotitcorrect = True
card.configure(text=str(number))
else:
gotitcorrect = False
card.configure(text='')
numcount -= 1
menuFrame = Frame(root, bg='gray')
menu = [Label(menuFrame,text='MEMORY GAME', bg = 'gray'), Button(menuFrame,command = GameStart,text = 'Start', bg='gray')]
for i in menu:
i.pack()
menuFrame.pack()
numlst = GetRandomNumber()
print(numlst)
gameFrame = Frame(root, bg='gray')
cards = [[Button(gameFrame) for j in range(4)] for i in range(4)]
index = 1
card_dict = {}
for x in range(rowsize):
for y in range(columnsize):
print(index)
cards[x][y].grid(row = y, column = x, padx=20,pady=20)
cards[x][y].configure(text = str(numlst[index-1]))
cards[x][y].configure(command = lambda: WrongOrRight(cards[x][y],numlst[cards[x][y]]))
card_dict[cards[x][y]] = numlst[index-1]
index+=1
Timer(5)
for x in range(rowsize):
for y in range(columnsize):
cards[x][y].configure(text = '')
root.grid_rowconfigure(0,weight=1)
root.grid_columnconfigure(0,weight=1)
root.grid_rowconfigure(rowsize,weight=1)
root.grid_columnconfigure(columnsize,weight=1)
root.mainloop()
这是我的错误:
Exception in Tkinter callback
Traceback (most recent call last): File
"/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
return self.func(*args) File "memorygame.py", line 62, in <lambda>
cards[x][y].configure(command = lambda: WrongOrRight(cards[x][y],numlst[cards[x][y]])) TypeError: list indices
must be integers or slices, not Button
卡片是按钮列表:
在代码的后面,我们有:
上面的代码在使用按钮作为索引时尝试访问
numlst
这是您的代码的一个版本,其中有一些更改。它修复了
TypeError
并去掉了card_dict
。它实际上并不需要,因为分配给每张卡的数字可以通过向表示该卡的Button
小部件添加属性来轻松存储。这样做还意味着您只需将卡传递给WrongOrRight()
函数所有重要的变化都用
# ALL CAPS COMMENTS
表示。我还对代码进行了表面性修改,因此它遵循了PEP 8 - Style Guide for Python Code以使其更具可读性,我强烈建议您以后自己阅读并遵循指南相关问题 更多 >
编程相关推荐