Como faço para excluir o texto existente no Tkinter?

votos
0

Eu estou tentando fazer uma função que muda os slides em uma apresentação animada usando if, mas quando o slide é suposto mudar, o widget existente permanece. Aqui está o meu mínima exemplo reprodutível (a propósito, o 'description.insert' está formatado corretamente no meu computador, mas não no meu telefone):

from tkinter import *
import random
import time
tk = Tk()
canvas = Canvas(tk, width = 400, height = 400)
tk.title('Diffusion')
canvas.pack()
 
slide = 0
 
def changeSlide():
    global slide
    slide += 1
    #WRITE TEXT
    if slide == 1:
        description = Text(tk, bd=0, height=5, width = 50)
        description.insert(INSERT, 'Diffusion is the net movement of particles from an area of higher concentration to an area of lower concentration, which results in the concentration being even. Here is an example, with the particles represented by orange dots:')
        description.place(x=0, y=190)
    elif slide == 2:
        #DRAW PARTICLES  
        particle = canvas.create_oval(10, 10, 20, 20, fill = 'orange')
 
nexT = Button(tk, text = 'NEXT', command = changeSlide)
nexT.pack()
nexT.place(bordermode = 'inside', x = 350, y = 375)
Publicado 24/10/2019 em 12:00
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Embora parece que você pode ter descoberto uma maneira de resolver o problema, aqui está um outro, possivelmente melhor, a abordagem. É criar um separado tk.Framepara manter o conteúdo do slide atual. Isto faz com que seja relativamente para limpar o slide por iteração que a "criança" objetos que ele contém e destruí-los.

import tkinter as tk
import time
import random

root = tk.Tk()
root.title('Diffusion')

slide = tk.Frame(root, width=400, height=400)
slide.pack()
slide_cnt = 0

nexT = tk.Button(root, text='NEXT')
nexT.place(bordermode='inside', x=350, y=375)

def slide_changer():
    global slide_cnt

    # Clear slide frame.
    for child in slide.winfo_children():
        child.destroy()

    slide_cnt += 1
    if slide_cnt == 1:  # Write text.
        description = tk.Text(slide, bd=0, height=5, width=50)
        description.insert(tk.INSERT,
            'Diffusion is the net movement of particles from an area of higher '
            'concentration to an area of lower concentration, which results in '
            'the concentration being even. Here is an example, with the '
            'particles represented by orange dots:')
        description.place(x=0, y=190)

    elif slide_cnt == 2:  # Draw particles.
        canvas = tk.Canvas(slide, width=400, height=400)
        canvas.pack()
        particle = canvas.create_oval(10, 10, 20, 20, fill='orange')

nexT.config(command=slide_changer)

root.mainloop()
Respondeu 24/10/2019 em 13:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more