Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Динамические названия переменных, как это сделать?


Автор: RM2010 11.3.2010, 21:35
Код

from tkinter import *
import random

app = Tk()
app.geometry('300x355+600+300')
canvas = Canvas(app, width=304, height=355)
canvas.pack(side=TOP)

for i in range(20):
    y = random.randrange(300)
    x = random.randrange(300)
    square = canvas.create_rectangle(x,y,x+20,y+20, fill="yellow")

app.mainloop()



Как следует из кода, данная программа создаёт на канвасе 20 прямоугольников. Но как сделать так, чтоб каждый из них был под своим именем, чтоб потом к каждому из них можно было обращаться, двигать и т.д.

То есть смотреться это должно как-то вот так:

for i in range(20):
     ...
    square+i = canvas.create_rectangle(x,y,x+20,y+20, fill="yellow")


и тогда появлялся бы square1, square2, square3 и т.д.

Заранее спасибо!

Автор: pythonwin 11.3.2010, 22:19
если переменные упорядочены и одного типа, а также не известно сколько переменных нужно создать или тем более сколько было создано, то лучше использовать список или словарь. Все остальные решения типа exec или eval могут наружать безопастность работы программы и привести к ухудшению отладки.

Добавлено через 4 минуты и 8 секунд
примерно так:
Код

from tkinter import *
import random
app = Tk()
app.geometry('300x355+600+300')
canvas = Canvas(app, width=304, height=355)
canvas.pack(side=TOP)
squares = []
for i in range(20):
    y = random.randrange(300)
    x = random.randrange(300)
    squares.append(canvas.create_rectangle(x,y,x+20,y+20, fill="yellow"))
app.mainloop()

Автор: RM2010 11.3.2010, 22:24
>>> то лучше использовать список и словарь. 
Естественно, а можно примерчик кода - как переменным присваивать названия по списку?

Добавлено через 4 минуты и 44 секунды
Вроде работает, спасибо!  smile 

Автор: pythonwin 11.3.2010, 22:59
Цитата(RM2010 @  12.3.2010,  01:24 Найти цитируемый пост)
Вроде работает, спасибо!  smile  

пожалуйста smile
настоятельно советую прочитать документацию и написать десятка два программ-примеров 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)