<p>这是您的代码的一个版本,其中有一些更改。它修复了<code>TypeError</code>并去掉了<code>card_dict</code>。它实际上并不需要,因为分配给每张卡的数字可以通过向表示该卡的<code>Button</code>小部件添加属性来轻松存储。这样做还意味着您只需将卡传递给<code>WrongOrRight()</code>函数</p>
<p>所有重要的变化都用<code># ALL CAPS COMMENTS</code>表示。我还对代码进行了表面性修改,因此它遵循了<a href="https://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">PEP 8 - Style Guide for Python Code</a>以使其更具可读性,我强烈建议您以后自己阅读并遵循指南</p>
<pre><code>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): # REMOVED NO LONGER NEEDED SECOND ARGUMENT.
global lastnum, numcount, gotitcorrect # ADDED
number = card.number # ADDED
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 = {} # NOT NEEDED
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]))
# ADDED DEFAULT ARGUMENTS TO LAMBDA FUNCTION TO MAKE IT WORK PROPERLY
cards[x][y].configure(command=lambda x=x, y=y: WrongOrRight(cards[x][y]))
cards[x][y].number = numlst[index-1] # ADD ATTRIBUTE TO BUTTON WIDGET
# card_dict[cards[x][y]] = numlst[index-1] # NOT NEEDED
index += 1
#Timer(5) # DISABLED FOR TESTING
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()
</code></pre>