Come faccio a cancellare il testo esistente in Tkinter?

voti
0

Sto cercando di fare una funzione che modifica le diapositive in una presentazione animata utilizzando istruzioni if, ma quando si suppone che la diapositiva di cambiare, il widget esistente rimane. Qui è il mio minimo esempio riproducibili (a proposito, il 'description.insert' è formattata correttamente sul mio computer, ma non sul mio telefono):

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)
È pubblicato 24/10/2019 alle 12:00
fonte dall'utente
In altre lingue...                            


1 risposte

voti
2

Anche se suona come si può avere trovato un modo per risolvere il problema, ecco un altro, forse meglio, approccio. Si crea un separato tk.Frameper contenere il contenuto della diapositiva corrente. Questo lo rende relativamente per cancellare la slitta dalla iterazione se il "bambino" oggetti in esse contenuti e li distruggono.

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()
Risposto il 24/10/2019 a 13:05
fonte dall'utente

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