Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, subprocess
- import tkinter as tk
- from tkinter import messagebox, ttk
- a =[]
- def move_up():
- selected = listbox.curselection()
- if selected:
- index = selected[0]
- if index > 0:
- item = listbox.get(index)
- listbox.delete(index)
- listbox.insert(index - 1, item)
- listbox.selection_set(index - 1)
- def move_down():
- selected = listbox.curselection()
- if selected:
- index = selected[0]
- if index < listbox.size() - 1:
- item = listbox.get(index)
- listbox.delete(index)
- listbox.insert(index + 1, item)
- listbox.selection_set(index + 1)
- # Пусть selected_files будет списком путей к файлам, который вы получаете
- selected_files = []
- # Ваша инициализация Tkinter и создание списка a (selected_files)
- def update_progress_bar(progress_bar, value, maximum):
- """Обновляет прогресс бар на заданное значение."""
- progress_bar['value'] = value
- progress_bar['maximum'] = maximum
- root.update_idletasks()
- def merge_mp4_to_mp3(): # Получить список всех выбранных файлов
- selected_files = a
- if not selected_files:
- messagebox.showerror("Ошибка", "Список файлов пуст")
- return
- # Определяем путь сохранения
- cmd = ['zenity', '--file-selection', '--directory']
- result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, text=True)
- save_directory = result.stdout.strip()
- if not save_directory:
- messagebox.showerror("Ошибка", "Папка для сохранения не выбрана")
- return
- total_files = len(selected_files)
- selected_files = sorted(selected_files)
- # Инициализируем прогресс-бар
- progress_bar = ttk.Progressbar(root, orient='horizontal', length=300, mode='determinate')
- progress_bar.pack(pady=20)
- progress_bar['maximum'] = total_files
- for index, mp4_path in enumerate(selected_files, start=1):
- mp3_path = os.path.join(save_directory, os.path.basename(mp4_path).rsplit('.', 1)[0] + '.mp3')
- ffmpeg_command = '''#!/bin/bash
- gnome-terminal -- bash -c '
- ffmpeg -i "{mp4_path}" -q:a 0 -map a "{mp3_path}" -y
- echo "Файл {mp4_name} был конвертирован в {mp3_name}"
- exit
- exec bash'
- '''.format(mp4_path=mp4_path, mp3_path=mp3_path, mp4_name=os.path.basename(mp4_path), mp3_name=os.path.basename(mp3_path))
- subprocess.run(['bash', '-c', ffmpeg_command])
- # Обновляем прогресс-бар
- progress_bar['value'] = index
- root.update_idletasks()
- progress_bar.pack_forget() # Убираем прогресс-бар по завершению работы
- messagebox.showinfo("Завершено", "Все файлы были конвертированы и сохранены в выбранную папку")
- def open_file_explorer():
- # Команда для запуска Zenity с фильтром для mp4 файлов.
- cmd = ['zenity', '--file-selection', '--multiple', '--separator=|', '--file-filter=mp4 files | *.mp4']
- # Вызов Zenity и получение выбранных путей
- result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, text=True)
- # Удаляем лишние пробельные символы и разделяем строки по '|' вместо запятой
- # Затем разделяем каждый путь, убирая символы новой строки
- file_paths = [path for path in result.stdout.strip().replace('\n', '').split('|') if path] # Выводим очищенные пути
- for filepath in file_paths:
- file_name = os.path.basename(filepath)
- a.append(filepath) # print(filepath, end="\n\n")
- listbox.insert(tk.END, file_name)
- def delete_selected(): # Получаем индекс (-ы) выбранного элемента
- selected_indices = listbox.curselection() # Удаляем выбранный элемент из списка
- for index in selected_indices[::-1]: # Итерируем в обратном порядке, чтобы избежать ошибок индексации
- listbox.delete(index)
- root = tk.Tk()
- root.title("mp4 в mp3")
- root.geometry("740x236+580+330") # Первые 2 определяют ширину высоту. Пос 2 x и y координаты на экране.
- # Фрейм для Listbox и Scrollbar
- frame = tk.Frame(root)
- frame.pack(pady=10, padx=20, fill=tk.BOTH, expand=True)
- # Фрейм для Listbox и Scrollbar
- listbox_frame = tk.Frame(root)
- listbox_frame.pack(side=tk.LEFT, pady=10, padx=20, fill=tk.BOTH, expand=True)
- # Listbox с возможностью масштабирования
- listbox = tk.Listbox(listbox_frame, height=15)
- listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
- # Scrollbar для Listbox
- scrollbar = tk.Scrollbar(listbox_frame, orient="vertical", command=listbox.yview)
- scrollbar.pack(side=tk.LEFT, fill=tk.Y)
- # Связываем Scrollbar с Listbox
- listbox.config(yscrollcommand=scrollbar.set)
- # Фрейм для кнопок перемещения
- move_frame = tk.Frame(listbox_frame)
- move_frame.pack(side=tk.LEFT, padx=10, fill=tk.Y)
- # Кнопки "Вверх" и "Вниз"
- move_up_btn = tk.Button(move_frame, text="Вверх", command=move_up)
- move_up_btn.pack(pady=40)
- move_down_btn = tk.Button(move_frame, text="Вниз", command=move_down)
- move_down_btn.pack(pady=5)
- # Кнопка "Конвертация MP4 в MP3"
- add_file_btn = tk.Button(root, text="Конвертация MP4 в MP3", command=merge_mp4_to_mp3)
- add_file_btn.pack(side=tk.BOTTOM, fill=tk.X, padx=20, pady=5)
- # Кнопка "Добавить файл" ниже всего остального контента
- merge_pdf_btn = tk.Button(root,text="Добавить файлы", command=open_file_explorer)
- merge_pdf_btn.pack(fill=tk.X, padx=20, pady=5)
- # Кнопка "Удалить из списка"
- delete_btn = tk.Button(root, text="Удалить", command=delete_selected)
- delete_btn.pack( fill=tk.X,padx=20, pady=25)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement