создание анимации внутри метода

#python #tkinter

#python #tkinter

Вопрос:

у меня есть метод с именем compare image, который сравнивает лицо между сохраненным файлом и лицом с помощью захвата камеры ,

иногда для его обработки требуется много времени, я хотел бы использовать анимацию, такую как панель загрузки, или, может быть, я могу использовать файл .gif, пока весь процесс не будет завершен

это пример моего кода

  def compareimage(id):
    try:
      loadimage()
      compareimage()
      insertlogintodatatabase()
      savelogimage()
    except:
      exception()
 

жаль, что я не могу создать анимацию во время всего этого процесса ,

как я могу его создать?

введите код здесь

Ответ №1:

Не совсем понял, что вы подразумеваете под «анимацией», потому что это может означать несколько вещей. Если вы пытаетесь создать панель прогресса в tkinter, импортируйте файл tkinter.ttk, и все готово! Код для определенной панели прогресса:

 from tkinter import *
from tkinter import ttk

root = Tk()
root.geometry("400x300")
prg = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode='determinate')
prg.pack(pady=20)
# You can use the start function to animate the progress bar just give it an int to determine the speed!
prg.start(10)
# You can also use the two lines below to add to the progress bar's value
# prg.step(5)
# prg['value'] = 50
root.mainloop()
 

Также вы можете установить режим на «неопределенный», а затем запустить индикатор выполнения, который может быть тем, что вам нужно. Если вы говорите о пользовательских анимациях, то это немного другое. Если
вы хотите создать пользовательский индикатор выполнения в tkinter, вам следует использовать виджет Canvas. Пример настраиваемого индикатора выполнения в tkinter с использованием canvas:

 from tkinter import *

root = Tk()
root.geometry("400x400")
root.config(bg="black")
percent = 0
progress = None
canvas = Canvas(root, width=310, height=10, bg="black", highlightcolor="black", highlightbackground="black")
canvas.pack(pady=10)
rect = canvas.create_rectangle(5, 0, 300, 6, fill="#2C383E", outline="#2C383E")


def animate():
    global percent, progress
    if percent < 100:
        percent  = 1
        if progress is not None:
            canvas.delete(progress)
        progress = canvas.create_rectangle(5, 0, percent * 3, 6, fill="#3333ff", outline="#3333ff")
    # Remove these two lines (the elif statement) to make the progress bar 'determinate'
    elif percent == 100:
        percent = 0
    root.after(5, animate)


# You can just call the function or assign it to a button
# animate()
btn = Button(root, text="Fill! ", command=animate)
btn.pack()
root.mainloop()