Hvordan sletter jeg eksisterende tekst i Tkinter?

stemmer
0

Jeg prøver å lage en funksjon som endrer lysbilder i en animert presentasjon ved hjelp hvis uttalelser, men når lysbildet er ment å endre, forblir den eksisterende widget. Her er min minimal reproduserbar eksempel (forresten, er 'description.insert' formatert riktig på datamaskinen min, men ikke på telefonen min):

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)
Publisert på 24/10/2019 klokken 12:00
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Selv om det høres ut som du kanskje har funnet ut en måte å løse problemet, her er en annen, muligens bedre, tilnærming. Det skaper en egen tk.Frameå holde gjeldende lysbilde innhold. Dette gjør det relativt å rydde raset ved å gjenta om "barnet" objekter den inneholder og ødelegge dem.

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()
Svarte 24/10/2019 kl. 13:05
kilden bruker

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