Nasıl Tkinter varolan metni silerim?

oy
0

Ben eğer ifadelerini kullanarak animasyonlu bir sunumda slaytlar değiştiren bir işlev yapmaya çalışıyorum, ancak slayt değiştirmek gerektiği zaman, mevcut Widget kalır. İşte benim minimal tekrarlanabilir örnek (bu arada, 'description.insert' telefonumda doğru bilgisayarımda değil biçimlendirilir) 'dir:

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)
Oluştur 24/10/2019 saat 12:00
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

Sorunu çözmek için bir yolunu bulmuş olabilir gibi geliyor olsa da, burada başka bir olasılıkla daha iyi, yaklaşım bu. Bu ayrı oluşturmak tk.FrameMevcut slaydın içeriğini tutmak için. Bu "çocuk", içerdiği ve onları yok nesneleri olsa nispeten yineleme tarafından slayt temizlemek için yapmak.

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()
Cevap 24/10/2019 saat 13:05
kaynak kullanıcı

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