как удалить кнопку сетки при нажатии на нее в tkinter

Я пытаюсь расположить предложение, в котором есть несколько слов, на кнопку сетки. Когда слово этого предложения нажато, я хочу удалить это слово кнопки сетки после того, как оно будет перемещено в другую строку кнопки сетки. Как удалить только ту кнопку сетки, которая нажата? Щелкая снова и снова, эти слова будут перемещены в другое положение и исчезнут одно за другим из исходного положения кнопок сетки.

shuffle_btn.grid_forget(row=r, column=c)
shuffle_btn.grid_remove(row=r, column=c)

не работает. Это дает эту ошибку TypeError: grid_forget() получил неожиданный аргумент ключевого слова «строка»

Как решить эту проблему? Заранее спасибо.

Код выглядит следующим образом, который работает при перемещении, но не при удалении.

from tkinter import *
root = Tk()
root.title('words clicking')
root.geometry("1000x600")
btn_lst = ["Do", "you", "have", "a", "book", "?"]
w_cnt = 0
# Create answer buttons
def move_to_ans(row, column):
    global cnt, w_cnt
    r = row
    c = column
    if w_cnt < cnt:
        ans_btn = Button(root, text=btn_lst[column],  font=(
        "Times", 20), fg="black")
        ans_btn.grid(row=1, column=w_cnt, sticky=N+E+W+S, pady=100)
        # shuffle_btn.grid_forget(row=r, column=c)
        w_cnt += 1
 # Create buttons of each word in a sentence
 cnt = len(btn_lst)
 for btn in range(cnt):
     shuffle_btn = Button(root, text=btn_lst[btn], command=lambda row=0, column=btn: move_to_ans(row, 
     column), font=("Times", 20), fg="blue")
 shuffle_btn.grid(row=0, column=btn, sticky=N+E+W+S, pady=100)
 root.mainloop()

Ожидаемый результат: перетасовка слов перед нажатием: (нужно сделать книгу? a you) --> Как удалить при нажатии

отвечать на слова после перехода от нажатой : (У тебя есть книга?)


person Jongkeun Choi    schedule 01.02.2021    source источник
comment
ans_btn.destroy() уничтожает кнопку   -  person grumpyp    schedule 01.02.2021
comment
Я думаю, что картина вашего ожидаемого результата может быть полезной для лучшего понимания.   -  person Cool Cloud    schedule 01.02.2021
comment
btn.destroy() не работает.   -  person Jongkeun Choi    schedule 01.02.2021


Ответы (1)


Вы можете использовать root.grid_slaves(row=r, column=c)[0].destroy() внутри move_to_ans():

def move_to_ans(row, column):
    global cnt, w_cnt
    r = row
    c = column
    if w_cnt < cnt:
        ans_btn = Button(root, text=btn_lst[column], font=("Times", 20), fg="black")
        ans_btn.grid(row=1, column=w_cnt, sticky=N+E+W+S, pady=100)
        root.grid_slaves(row=r, column=c)[0].destroy() # destroy the clicked button
        w_cnt += 1

Другой способ — передать экземпляр кнопки в move_to_ans().

person acw1668    schedule 03.02.2021