Проблема динамического создания элементов tkinter - PullRequest
0 голосов
/ 29 сентября 2019

Я действительно не понимаю этого. С текстом y все в порядке, но когда он передается в лямбда-функцию для печати y, он просто печатает 2.

Кажется простым, но я не получаюэто.

Может кто-нибудь объяснить или сказать мне, как я могу это исправить?

Спасибо

from tkinter import *

window = Tk()

buttonHeight = 10
buttonWidth = 25

gridItemsList = [['-', '-', '-'], ['-', '-', '-'],['-', '-', '-']]
for y in range (0, 3):
    for x in range(0, 3):           
            gridItemsList[2-y][x] = ([Button(window, height=buttonHeight, width=buttonWidth, background="white", text=y, command=lambda:print(y)), [] ])
            gridItemsList[2-y][x][0].grid(column = y, row=x, padx=20, pady=20)

mainloop()

1 Ответ

1 голос
/ 29 сентября 2019
 y in range(0,3) 

дает

 y=0, y=1, y=2

Следовательно, когда ваши виджеты создаются, значение y изменяется через цикл (0,1,2), следовательно, текст кнопки в порядке. но в конце цикла значение y равно y=2.

Следовательно, вы всегда получите 2 в качестве вывода ваших функций печати, потому что кнопки доступны для использования только после завершения цикла, а последнее значение и текущее значение y равно 2 послепетля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...