#python-2.7 #tkinter
#python-2.7 #tkinter
Вопрос:
В игре, которую я создаю, мне нужно сохранить список координат x и y, но в списке хранится только последняя итерация. Как мне заставить его сохранять все итерации? Код, который я использовал, находится здесь:
from Tkinter import *
import Tkinter as tk
import random
screen = tk.Tk(className = "Battle Ship Game" )
screen.geometry("300x300")
screen["bg"] = "white"
line1= list()
choosing = 0
def choice(x,y) :
global choises
choises = {}
global list2
list2 = []
list2.append((x,y))
print list2
return list2
def buildaboard1(screen) :
x = 20
for n in range(0,10) :
y = 20
for i in range(0,10) :
line1.append(tk.Button(screen ))
line1[-1].place( x = x , y = y 20 , height = 20 , width = 20 )
a = x
b = y
line1[-1]["command"] = (lambda a = x , b = y :choice (a , b))
y = y 20
x = x 20
choosing = choosing 1
while (choosing < 5) :
buildaboard1(screen)
choosing = choosing 1
computer_choises
screen.mainloop()
Ответ №1:
Сделать list2
глобальным. Теперь вы очищаете list2
(создаете list2 = []
), прежде чем добавлять новые (x,y)
Моя версия — я изменил имя list2
на interactions
.
И я внес другие изменения.
from Tkinter import *
import Tkinter as tk
import random
screen = tk.Tk(className = "Battle Ship Game" )
screen.geometry("300x300")
screen["bg"] = "white"
board= []
choises = {}
interactions = []
def choice(x,y) :
global interactions
interactions.append((x,y))
print interactions
return interactions # you don't have to return global variable
def build_board(screen) :
size = 20
x = 20
for __ in range(10):
y = 20
for __ in range(10):
bt = tk.Button(screen, command=lambda a=x,b=y:choice(a, b))
bt.place( x=x, y=y size, height=size , width=size )
board.append(bt)
y = size
x = size
#print x, y
# I don't know why you create board many times - create once.
# Now you have buttons over buttons
# because you don't remove old buttons before you create new board.
for choosing in range(1,5):
build_board(screen)
#computer_choises
screen.mainloop()
РЕДАКТИРОВАТЬ: В текущей версии вам не нужно, choice()
потому что вы могли бы использовать
bt = tk.Button(screen, command=lambda a=x,b=y:interactions.append((a,b)))