2015-12-04 5 views
0

Я пропустил два часа, пытаясь сделать этот уродливый код короче, чтобы получить их значение сразу после того, как «customcript #» - это мои записи, которые я хочу вернуть обратно на «customcript #». get() ',' rootfr '- мой основной фрейм, s # - переменные. Поэтому я хотел знать, есть ли способ сделать это с помощью цикла «for» или чего-то подобного, спасибо.Требуется оптимизировать создание записей с помощью Tkinter

customscript1 = Entry(rootfr) 
customscript1.insert(0, s1) 
customscript1.grid(column = 3, row = 1) 

customscript2 = Entry(rootfr) 
customscript2.insert(0, s1) 
customscript2.grid(column = 3, row = 2) 

customscript3 = Entry(rootfr) 
customscript3.insert(0, s1) 
customscript3.grid(column = 3, row = 3) 

customscript4 = Entry(rootfr) 
customscript4.insert(0, s1) 
customscript4.grid(column = 3, row = 4) 

customscript5 = Entry(rootfr) 
customscript5.insert(0, s1) 
customscript5.grid(column = 3, row = 5) 

customscript6 = Entry(rootfr) 
customscript6.insert(0, s1) 
customscript6.grid(column = 3, row = 6) 

ответ

-1

Вы можете использовать locals() или globals() я думаю.

local_dict = locals() 
for index in xrange(1, 7): 
    local_dict['customscript%d' % index] = entry = Entry(rootfr) 
    entry.insert(0, s1) 
    entry.grid(column = 3, row = index) 

Функции ссылки:

https://docs.python.org/2/library/functions.html#globals

https://docs.python.org/2/library/functions.html#locals

Или вы могли бы просто использовать список, чтобы хранить все эти customscripts, как я серьезно сомневаюсь, что вам действительно нужно иметь кучу пронумерованных переменные. Как правило, если вы вынуждены писать уродливый код, проблема находится где-то в архитектуре кода.

+0

О спасибо @Lav: D, не знал местных жителей и вещи в мире ... Я новичок, у меня есть чему поучиться! Спасибо за быстрый ответ. – Yooooomi

+0

Хотя технически это работает, это действительно плохая идея динамически генерировать переменные таким образом. Есть гораздо более простые способы. Я вижу, что вы предупреждали об этом, но, поставив сначала код в свой ответ, создается впечатление, что это правильное решение. –

+0

@BryanOakley, вопрос был в основном о том, как установить глобальные переменные с динамически сгенерированными именами, и на этот вопрос я ответил. У автора вопроса могут быть плохие причины использовать это, но его вопрос будет оставаться и посещаться другими людьми, у которых могут быть вполне законные причины использовать такие методы. Как проповедовать, не давая ответа, будет полезно ** их **? – Lav

0

Вы можете сохранить записи в списке или словаре. Я считаю, словари, чтобы быть удобным, поскольку они могут быть редкими (т.е. вы не должны начинать отсчет с нуля):

entries = {} 
for row in range(1,7): 
    e = Entry(rootfr) 
    e.insert(0, s1) 
    e.grid(column = 3, row = 1) 
    entries[row] = e 

Позже вы можете получить доступ к ним через их индекс:

for row in range(1, 7): 
    print("row %s has the value %s" % (row, entries[row]) 

 Смежные вопросы

  • Нет связанных вопросов^_^