Hoe kan ik de bestaande tekst te schrappen in Tkinter?

stemmen
0

Ik ben op zoek naar een functie die dia's in een geanimeerde presentatie verandert door het gebruik van if-statements te maken, maar wanneer de dia wordt verondersteld om te veranderen, de bestaande widget blijft. Hier is mijn minimale reproduceerbaar voorbeeld (door de manier, is de 'description.insert' correct weergegeven op mijn computer, maar niet geformatteerd op mijn telefoon):

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)
De vraag is gesteld op 24/10/2019 om 12:00
bron van user
In andere talen...                            


1 antwoorden

stemmen
2

Hoewel het klinkt als je kan hebben bedacht een manier om het probleem op te lossen, hier is een andere, mogelijk betere aanpak. Het creëren van een aparte tk.Frameom de inhoud van de huidige dia's vast te houden. Dit maakt het relatief aan de dia te wissen door het itereren al bevat en hen te vernietigen het "kind" objecten.

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()
antwoordde op 24/10/2019 om 13:05
bron van user

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