Tkinter динамически создает и удаляет кнопки - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь динамически удалить последнюю кнопку и создать новую кнопку в следующей строке с помощью функции команды, общей для всех кнопок «+». Однако с моим текущим кодом у меня нет ничего, кроме одной кнопки, остающейся в самой первой строке, и она никогда не исчезает, так как я sh и под ней не появляются новые кнопки.

import tkinter as tk
root = tk.Tk()
root.title('test1')
root.geometry('300x300')

def num_add():

    prev_row = int(btn_list[-1].grid_info()['row'])
    add_btn = tk.Button(root,text='+',command=num_add)
    btn_list.append(add_btn)
    r1 = prev_row +1
    btn_list[-1].grid(row=r1,column=0)

    btn_list[-2].grid_forget()

btn_list = []
add_btn = tk.Button(root,text='+',command=num_add)
add_btn.grid(row=0,column=0)
btn_list.append(add_btn)

root.mainloop()

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Ваш код действительно работает должным образом. Если вы посмотрите на .grid_info() для кнопки после того, как нажмете на нее, вы увидите, что он говорит, что кнопка находится в строке 1, столбце 0. Причина, по которой это выглядит не так, как вы ожидали, заключается в том, что там ничего нет. в строке 0 больше, поэтому строка фактически имеет высоту 0.

0 голосов
/ 29 мая 2020

Следующие сделают эту работу за вас. Но, судя по вашему вопросу, я не уверен, что это именно то, что вам нужно.

import tkinter as tk
root = tk.Tk()
root.title('test1')
root.geometry('300x300')

def num_add():

    prev_row = int(btn_list[-1].grid_info()['row'])
    add_btn = tk.Button(root,text='+',command=num_add)
    btn_list.append(add_btn)
    #create Spacer
    spacer = tk.Label(root)
    r1 = prev_row +1
    spacer.grid(row=r1, column=0)
    btn_list[-1].grid(row=r1,column=0)

    btn_list[-2].grid_forget()

btn_list = []
add_btn = tk.Button(root,text='+',command=num_add)
add_btn.grid(row=0,column=0)
btn_list.append(add_btn)

root.mainloop()
0 голосов
/ 29 мая 2020

Это то, что вам нужно ?: я использовал место (x, y)

import tkinter as tk
root = tk.Tk()
root.title('test1')
root.geometry('300x300')
global i
def num_add():
    global i
    add_btn.place_forget()
    i=i+1
    add_btn.place(x=2, y=i*30+20)

i=0   
add_btn = tk.Button(root,text='+',command=num_add)
add_btn.place(x=2, y=i*30+10)

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