Stworzyłem prosty program do konwersji wideo na audio, używając biblioteki moviepy i programu w następujący sposób:

import moviepy.editor as mp
from tkinter import *
from tkinter import ttk
from tkinter.filedialog import asksaveasfile, askopenfile
from tkinter.messagebox import showerror

def Open():
    video_path = askopenfile(initialdir = "Video", title = "Open Video", filetypes = (("Video", "*.MP4;*.AVI;*.WAV;*.MKV;*.webm;*.TS;*.ASF;*OOG"), ("All files", "*.*")))

    try:
        open(video_path.name, "r")
        ent_mp4.delete(0, END)
        ent_mp4.insert(0, video_path.name)
    except:
        pass

def save_in():
    if not(ent_mp4.get() == ""):
        saveas = asksaveasfile(initialdir = "Music", title = "Save in", filetype = [("Aduio", "*.MP3;*.FLAC;*.CD;*.WMV"), ("All filest", "*.*")])

        ent_mp3.delete(0, END)
        ent_mp3.insert(0, saveas.name)
    else:
        showerror("Error: Empty Entry", "Pleas Enter Your Video Path")

def convert():
    video = ent_mp4.get()
    music = ent_mp3.get()

    if not(music == ""):
        root.destroy()

        clip = mp.VideoFileClip(video)
        clip.audio.write_audiofile(music)

        main()
    else:
        showerror("Error: Empty Entry", "Pleas Enter Your Music Path")

ent_mp4, ent_mp3, root = None, None, None
bu1, bu2, bu3 = None, None, None
def main():
    global ent_mp3, ent_mp4, root, bu1, bu2, bu3, sv
    root = Tk()
    root.title("Convert Video to Audio")

    ent_mp4 = ttk.Entry(root, width = 50)
    ent_mp4.grid(row = 0, column = 0)

    ent_mp3 = ttk.Entry(root, width = 50)
    ent_mp3.grid(row = 1, column = 0)

    ttk.Button(root, text = "Open video", command = lambda: Open()).grid(row = 0, column = 1)

    ttk.Button(root, text = "Save in", command = lambda: save_in()).grid(row = 1, column = 1)

    f = ttk.Frame(root)
    f.grid(row = 2, column = 0, columnspan = 2)

    ttk.Button(f, text = "Convert", command = lambda: convert()).pack(side = LEFT)

    ttk.Button(f, text = "Exit", command = lambda: exit()).pack(side = RIGHT)

    root.mainloop()


main()

Program się powiódł, ale chcę po prostu dodać coś prostego, czyli to, że zamiast usuwać okno, gdy trwa proces przełączania root.destroy (), dodawany jest animowany plik GIF, który wskazuje, że proces jest w toku

Podejrzewam, że rozwiązaniem jest zastosowanie dwóch rzeczy jednocześnie, aby proces się powiódł

Ale nie udało mi się wypróbować polecenia „with”, ale nie wyszło

Więc jakie jest rozwiązanie

-1
abdo Information 19 grudzień 2019, 20:01
1
Prawdopodobnie chcesz uruchomić jedno z poleceń w trybie asynchronicznym.
 – 
alter123
19 grudzień 2019, 20:15

1 odpowiedź

Wątkowanie pozwoli na jednoczesne działanie dwóch lub więcej funkcji.

from threading import Thread

def func1():
    print('Working')

def func2():
    print('Working')

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
0
Grigorian 19 grudzień 2019, 21:36