как назначить переменную для записи python tkinter?

#python #python-3.x #tkinter

Вопрос:

Я пытаюсь создать простую игру-головоломку » SOS » от Tkinter. Я создаю сетку виджетов записей, используя метод сетки. Теперь мне нужны назначенные переменные для каждой записи. Я пытаюсь сделать это, используя циклы for, но я не могу использовать эту переменную должным образом. Вы не могли бы мне помочь? Моя идея вопроса объясняет приведенную ниже диграмму,

введите описание изображения здесь

Код

 for i in range(5):
    for j in range(5):
        self.entry=Entry(root,textvariable=f'{i}{j}')
        self.entry.grid(row=i,column=j)
        self.position.update({f"{i}-{j}":f"{i}{j}"})
enter code here
 

Комментарии:

1. Вам не нужны отдельные переменные, вам нужен один контейнер, содержащий их все. Может быть список из 25 элементов, может быть список из 5 элементов из 5 списков элементов, может быть словарь, в котором ключи (строки, столбцы) являются кортежами.

Ответ №1:

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

Ниже приведен простой, но полный пример, который показывает, как вы можете создать 2-D список, а также выполнить поиск в этом списке объекта ввода:

 from tkinter import * # You might want to use import tkinter as tk

root = Tk()

def searcher():
    row = int(search.get().split(',')[0]) # Parse the row out of the input given
    col = int(search.get().split(',')[1]) # Similarly, parse the column
    
    obj = lst[row][col] # Index the list with the given values
    print(obj.get()) # Use the get() to access its value.

lst = []
for i in range(5):
    tmp = [] # Sub list for the main list
    for j in range(5):
        ent = Entry(root)
        ent.grid(row=i,column=j)
        tmp.append(ent)
    lst.append(tmp)

search = Entry(root)
search.grid(row=99,column=0,pady=10) # Place this at the end

Button(root,text='Search',command=searcher).grid(row=100,column=0)

root.mainloop()
 

Вам нужно ввести какую-то строку и столбец, например 0,0 , который относится к 1-й строке, 1-му столбцу, и нажать кнопку. Убедитесь, что в записи нет пробелов. Вам не следует сильно беспокоиться о части поиска, так как вам может потребоваться какая-то другая логика. Но вместо того, чтобы создавать переменные на ходу, вы должны использовать этот подход и хранить их в контейнере.

Также обратите внимание, что вам не нужно использовать textvariable , так как здесь необходимость в них полностью отсутствует. Вы можете делать все, что захотите, с самим исходным объектом Entry . Просто убедитесь, что индексация списка начинается с 0, а не с 1(или вычтите 1 из заданных нормальных значений).

Комментарии:

1. Большое спасибо.

2. @DilshanMadhuranga Если это решило вашу проблему, обязательно отметьте как правильный ответ 🙂

3. ОК. Еще раз спасибо.