HACKERS ELITE
Bienvenido a HACKERS ELITE
porfavor registrate o inicia secion para ver todo el contenido del foro, disfruta tu visita!

Unirse al foro, es rápido y fácil

HACKERS ELITE
Bienvenido a HACKERS ELITE
porfavor registrate o inicia secion para ver todo el contenido del foro, disfruta tu visita!
HACKERS ELITE
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Últimos temas
» Me bloquearon mi celular para conectarse a la Red Wifi en Modo Avion
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Sep 05, 2014 6:15 pm por JAVIER_77

» Hacker nostale
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 20, 2012 5:02 pm por Sweet_Boy

» Chrome OS 20.x pasa al canal estable
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 13, 2012 11:15 pm por [D]ement<<<

» Disponible openSUSE 12.2 RC 1
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 13, 2012 12:44 am por [D]ement<<<

» NitroShare, comparte archivos y carpetas entre Linux y Windows
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 13, 2012 12:26 am por [D]ement<<<

» Linux Mint 13 KDE Release Candidate, disponible
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 13, 2012 12:18 am por [D]ement<<<

» LibreOffice 3.5.5, más estabilidad
[Python-Tkinter] EasyMp3Edit I_icon_minitimeVie Jul 13, 2012 12:06 am por [D]ement<<<

» File History, un Time Machine para Windows 8
[Python-Tkinter] EasyMp3Edit I_icon_minitimeMiér Jul 11, 2012 9:50 pm por [D]ement<<<

» Como habilitar el logueo automático en Windows
[Python-Tkinter] EasyMp3Edit I_icon_minitimeMiér Jul 11, 2012 9:44 pm por [D]ement<<<

» Acronis True Image 2012
[Python-Tkinter] EasyMp3Edit I_icon_minitimeMar Jul 10, 2012 12:15 am por [D]ement<<<

» Virus Informaticos
[Python-Tkinter] EasyMp3Edit I_icon_minitimeMar Mayo 08, 2012 7:10 am por Sokoleonardo

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Abril 2024
LunMarMiérJueVieSábDom
1234567
891011121314
15161718192021
22232425262728
2930     

Calendario Calendario


[Python-Tkinter] EasyMp3Edit

Ir abajo

[Python-Tkinter] EasyMp3Edit Empty [Python-Tkinter] EasyMp3Edit

Mensaje por Sokoleonardo Dom Ene 29, 2012 2:37 pm

Este es un editor de informacion de etiquetas mp3 que hice.


Código:

# -*- coding: cp1252 -*-
from Tkinter import *
from tkFileDialog import askopenfilename
from tkMessageBox import showerror, showwarning
from tkFont import Font
from mutagen.mp3 import EasyMP3 as MP3
from os.path import getsize, exists, splitdrive
from sys import argv
from platform import system as OS_NAME

MIDISCO = splitdrive(argv[0])[0]+"\\"

TiposMode = ["Stereo", "Joint Stereo", "DualChannel", "Mono"]#0-3

def GetSizeToString(bytes):
    #Pasa los bytes 7589108 a 7.23Mb
    Mb = str(bytes / 1024.0 / 1024.0)
    if "." in Mb: cifra1, cifra2 = Mb.split(".")
    else: cifra1, cifra2 = Mb, "0"
    tamanio = (cifra1 if int(cifra1) < 1024 else str(int(cifra1)/1000))+"."+(cifra2[:2] if len(cifra2) > 1 else cifra2[0])+("Mb" if int(cifra1) < 1024 else "Gb")
    return tamanio


def GetTimerString(inSegs):
    """enconvert segs 377 to 06:17
        >>> GetTimeNormalTrack(3600) #1 HS
        1:00:00"""
    hours = 0
    mins = 0
    segs = 0
    for i in range(int(inSegs)):
        segs += 1
        if segs > 59:
            segs = 0
            mins += 1
            if mins > 59:
                mins = 0
                hours += 1
    return (str(hours)+":" if hours != 0 else "")+(str(mins) if mins > 9 else "0"+str(mins))+":"+(str(segs) if segs > 9 else "0"+str(segs))

def ArchivoErrorBox(file):
    showerror("Error", 'El archivo "'+file+'" no funciona en EasyTagEdit')

class Body:
    def __init__(self):
        self.ventana = Tk()
        self.ventana.geometry("440x330")
        self.ventana.title('EasyMp3Edit - presiona el boton "Abrir nuevo"')
        self.ventana.resizable(False, False)
        icono = "EasyTagEdit."+("ico" if OS_NAME() == "Windows" else "png")
        try:
            self.ventana.iconbitmap(icono)
            ERROR_ICON = False
        except:
            ERROR_ICON = True
        #MENU TOP
        self.BaseMenus = LabelFrame(self.ventana, bg = "gray60", relief = "raised")
        self.BaseMenus.pack(side = TOP, fill = X)
        self.Boton_Menu_Archivo = Menubutton(self.BaseMenus, text = "Archivo", bg = "gray65", fg = "white", activebackground = "gray70", activeforeground = "white")
        self.Boton_Menu_Archivo.pack(side = LEFT)
        self.Menu_Archivo = Menu(self.Boton_Menu_Archivo, tearoff = False, bg = "gray65", fg = "white", activebackground = "gray90", activeforeground = "black")
        self.Menu_Archivo.add_command(label="Abrir nuevo MP3", command=self.AbrirArchivoMp3)
        self.Menu_Archivo.add_command(label="Cerrar MP3", state="disable", command=self.CerrarMp3)
        self.Menu_Archivo.add_command(label="Guardar", state="disable", command=self.GuardarActualEnActual)
        self.Menu_Archivo.add_command(label="Guardar en", state="disable", command=self.GuardarMp3Tag)
        self.Boton_Menu_Archivo["menu"] = self.Menu_Archivo
        self.Boton_Menu_Ayuda = Menubutton(self.BaseMenus, text = "Ayuda", bg = "gray65", fg = "white", activebackground = "gray70", activeforeground = "white")
        self.Boton_Menu_Ayuda.pack(side = LEFT)
        self.Menu_Ayuda = Menu(self.Boton_Menu_Ayuda, tearoff = False, bg = "gray65", fg = "white", activebackground = "gray90", activeforeground = "black")
        self.Menu_Ayuda.add_command(label="Acerca de...", command=self.AcercaDE)
        self.Boton_Menu_Ayuda["menu"] = self.Menu_Ayuda
        fontSpecial = Font(size=8, weight="bold")
        self.fondo = Canvas(self.ventana, bg="gray80", highlightbackground = "gray70")
        self.fondo.place(x=0, y=30, width=440, height=300)
        self.fondo.create_line(8,6, 430,6, fill="#000000")
        self.fondo.create_line(8,294, 430,294, fill="#000000")
        for i in range(10,290,5):
            self.fondo.create_text(7, i, fill="#FFFFFF", text="..", font=fontSpecial)
            self.fondo.create_text(431, i, fill="#FFFFFF", text="..", font=fontSpecial)
        self.BotonAbrirNuevo = Button(self.ventana, font=fontSpecial, bg="gray70", activebackground="gray60", fg="#222222", activeforeground="#222222", text="Abrir nuevo", underline=0, command=self.AbrirArchivoMp3)
        self.BotonAbrirNuevo.place(x=15, y=40, width=80, height=40)
        self.BotonCerrarActual = Button(self.ventana, font=fontSpecial, bg="gray70", activebackground="gray60", fg="#222222", activeforeground="#222222", state="disabled", text="Cerrar mp3", underline=0, command=self.CerrarMp3)
        self.BotonCerrarActual.place(x=97, y=40, width=80, height=40)
        self.BotonGuardar = Button(self.ventana, font=fontSpecial, bg="gray70", activebackground="gray60", fg="#222222", activeforeground="#222222", state="disabled", text="Guardar", underline=0, command=self.GuardarActualEnActual)
        self.BotonGuardar.place(x=179, y=40, width=80, height=40)
        self.BotonGuardarActualEn = Button(self.ventana, font=fontSpecial, bg="gray70", activebackground="gray60", fg="#222222", activeforeground="#222222", state="disabled", text="Guardar en", underline=0, command=self.GuardarMp3Tag)
        self.BotonGuardarActualEn.place(x=261, y=40, width=80, height=40)
        self.BotonAcercaDe = Button(self.ventana, font=fontSpecial, bg="gray70", activebackground="gray60", fg="#222222", activeforeground="#222222", text="Acerca de...", underline=0, command=self.AcercaDE)
        self.BotonAcercaDe.place(x=343, y=40, width=80, height=40)
        self.fondo.create_line(20,54, 418,54, fill="#000000")
        #########InfoTrack#########
        self.MarcoInfo = LabelFrame(self.ventana, bg="gray80", font=fontSpecial, text="Info MP3", fg="#000000", relief="groove")
        self.MarcoInfo.place(x=20, y=90, width=398, height=75)
        self.InfoDuracion = Label(self.MarcoInfo, bg="gray80", font=fontSpecial, text="Duracion:", fg="#472F13")
        self.InfoDuracion.place(x=10, y=0)
        self.InfoTamanyo = Label(self.MarcoInfo, bg="gray80", font=fontSpecial, text="Tamaño en disco:", fg="#472F13")
        self.InfoTamanyo.place(x=10, y=17)
        self.InfoCalidad = Label(self.MarcoInfo, bg="gray80", font=fontSpecial, text="Calidad:", fg="#472F13")
        self.InfoCalidad.place(x=10, y=34)
        #########InputInfoTrack########
        self.MarcoInputInfo = LabelFrame(self.ventana, bg="gray80", font=fontSpecial, text="Edit Info MP3", fg="#000000", relief="groove")
        self.MarcoInputInfo.place(x=20, y=170, width=398, height=145)
        Label(self.MarcoInputInfo, bg="gray80", text="Titulo:", fg="#000000").place(x=5, y=5)
        self.TituloInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.TituloInput.place(x=55, y=5, width=330)
        Label(self.MarcoInputInfo, bg="gray80", text="Artista:", fg="#000000").place(x=5, y=27)
        self.ArtistaInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.ArtistaInput.place(x=55, y=27, width=330)
        Label(self.MarcoInputInfo, bg="gray80", text="Album:", fg="#000000").place(x=5, y=49)
        self.AlbumInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.AlbumInput.place(x=55, y=49, width=130)
        Label(self.MarcoInputInfo, bg="gray80", text="Año:", fg="#000000").place(x=190, y=49)
        self.AnyoInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.AnyoInput.place(x=230, y=49, width=85)
        Label(self.MarcoInputInfo, bg="gray80", text="Pista:", fg="#000000").place(x=315, y=49)
        self.PistaInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.PistaInput.place(x=350, y=49, width=35)
        Label(self.MarcoInputInfo, bg="gray80", text="Genero:", fg="#000000").place(x=5, y=71)
        self.GeneroInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.GeneroInput.place(x=55, y=71, width=130)
        Label(self.MarcoInputInfo, bg="gray80", text="Grupo:", fg="#000000").place(x=190, y=71)
        self.GrupoInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.GrupoInput.place(x=230, y=71, width=155)
        Label(self.MarcoInputInfo, bg="gray80", text="Copyright:", fg="#000000").place(x=2, y=93)
        self.DerechosInput = Entry(self.MarcoInputInfo, bg="#FFFFFF", fg="#000000", state="disabled", relief="groove", disabledbackground="#FFFFFF")
        self.DerechosInput.place(x=55, y=93, width=330)
        self.TodasEntradas = (self.TituloInput, self.ArtistaInput, self.AlbumInput, self.AnyoInput, self.PistaInput, self.GeneroInput, self.GrupoInput, self.DerechosInput)
        #Sistema del archivo MP3:
        self.FileNameMp3 = ""
        #Chequeos:
        def ShowErrorIcon():
            if exists(icono):
                error = "'"+icono+"' es un icono corrupto, los iconos se deben hacer con programas echos para crear iconos."
            else:
                error = "'"+icono+"' no se encuentra"
            showwarning("EasyTagEdit - error en icono", error)
        if ERROR_ICON: self.ventana.after(2000, ShowErrorIcon)
        if len(argv) > 1: self.ventana.after(1000, self.AbrirArchivoArgumentado)
       

    def CerrarMp3(self):
        self.LimpiarDatos()
        for objeto in (self.BotonCerrarActual, self.BotonGuardar, self.BotonGuardarActualEn)+self.TodasEntradas:
            objeto["state"] = "disable"

    def GuardarMp3Tag(self, FILE=None):
        if not FILE:
            file = askopenfilename(title="Abrir un archivo MP3", initialdir=MIDISCO, filetypes = (("Sound","*.mp3"),))
        else:
            file = FILE
        if file:
            try:
                self.FileNameMp3 = file
                Tag = MP3(self.FileNameMp3)
                Tag["title"] = self.TituloInput.get()
                Tag["artist"] = self.ArtistaInput.get()
                Tag["album"] = self.AlbumInput.get()
                Tag["date"] = self.AnyoInput.get()
                Tag["tracknumber"] = self.PistaInput.get()
                Tag["genre"] = self.GeneroInput.get()
                Tag["performer"] = self.GrupoInput.get()
                Tag["copyright"] = self.DerechosInput.get()
                Tag.save()
            except:
                ArchivoErrorBox(file)

    def GuardarActualEnActual(self):
        self.GuardarMp3Tag(self.FileNameMp3)
       
    def LimpiarDatos(self):
        self.FileNameMp3 = ""
        for entrada in self.TodasEntradas:
            entrada.delete(0, "end")
        self.InfoDuracion["text"] = "Duracion:"
        self.InfoTamanyo["text"] = "Tamaño en disco:"
        self.InfoCalidad["text"] = "Calidad:"
        for menu in range(1,5):
            self.Menu_Archivo.entryconfigure(menu, state="disable")

    def AbrirArchivoMp3(self, FILE=None):
        if not FILE:
            file = askopenfilename(title="Abrir un archivo MP3", initialdir=MIDISCO, filetypes = (("Sound","*.mp3"),))
        else:
            file = FILE
        if file:
            try:
                self.LimpiarDatos()
                self.FileNameMp3 = file
                Tag = MP3(self.FileNameMp3)
                TagInfo = Tag.info
                anyo = Tag["date"][0] if Tag.has_key("date") else ""
                pista = Tag["tracknumber"][0] if Tag.has_key("tracknumber") else ""
                grupo = Tag["performer"][0] if Tag.has_key("performer") else ""
                compositor = Tag["composer"][0] if Tag.has_key("composer") else ""
                album = Tag["album"][0] if Tag.has_key("album") else ""
                derechos = Tag["copyright"][0] if Tag.has_key("copyright") else ""
                genero = Tag["genre"][0] if Tag.has_key("genre") else ""
                artista = Tag["artist"][0] if Tag.has_key("artist") else ""
                titulo = Tag["title"][0] if Tag.has_key("title") else ""
                segs = TagInfo.length
                self.InfoDuracion["text"] = "Duracion: "+GetTimerString(int(segs))+"  -  segs: "+str(segs)
                self.InfoTamanyo["text"] = "Tamaño en disco: "+GetSizeToString(getsize(file))
                self.InfoCalidad["text"] = "Calidad: "+str(TagInfo.sample_rate/1000)+"kHz, "+str(TagInfo.bitrate/1000)+"kbps, "+TiposMode[TagInfo.mode]
                for objeto in (self.BotonCerrarActual, self.BotonGuardar, self.BotonGuardarActualEn)+self.TodasEntradas:
                    objeto["state"] = "normal"
                for menu in range(1,5):
                    self.Menu_Archivo.entryconfigure(menu, state="normal")
                self.TituloInput.insert(0, titulo)
                self.ArtistaInput.insert(0, artista)
                self.AlbumInput.insert(0, album)
                self.AnyoInput.insert(0, anyo)
                self.PistaInput.insert(0, pista)
                self.GeneroInput.insert(0, genero)
                self.GrupoInput.insert(0, grupo)
                self.DerechosInput.insert(0, derechos)
            except:
                self.LimpiarDatos()
                for objeto in (self.BotonCerrarActual, self.BotonGuardar, self.BotonGuardarActualEn)+self.TodasEntradas:
                    objeto["state"] = "disabled"
                ArchivoErrorBox(file)
            self.ventana.title('EasyMp3Edit')

    def AbrirArchivoArgumentado(self):
        self.AbrirArchivoMp3(argv[1])

    def AcercaDE(self):
        GEOMETRY = tuple([int(str)+40 for str in self.ventana.geometry().split("+")[1:]])
        ventanaAcercaDE = Tk()
        ventanaAcercaDE.geometry("250x250+%d+%d" % GEOMETRY)
        ventanaAcercaDE.title("Acerca de EasyMp3Edit")
        ventanaAcercaDE.resizable(False, False)
        icono = "EasyTagEdit."+("ico" if OS_NAME() == "Windows" else "png")
        try:
            ventanaAcercaDE.iconbitmap(icono)
        except: pass
        Frame(ventanaAcercaDE, bg="gray10").place(x=0, y=0, width=250, height=250)
        Texto = Text(ventanaAcercaDE, bg="gray90", fg="#000000")
        Texto.place(x=5,y=5, width=240, height=240)
        Texto.insert("0.0", "Version: 1.0\nLenguaje de programacion usado: Python 2.5.0\nCreador: Leonardo A. Reichert\nFecha: 2011\nModulos usados con Python:\n  Tkinter\n  tkFileDialog\n  tkMessageBox\n  tkFont\n  mutagen.mp3\n  os.path\n  sys\n  platform\n\nPara la linea de comandos usa:\n  C:\\EasyTagEdit.py archivo.mp3\n\nGracias por usar EasyMp3Edit")
        Texto["state"] = "disabled"

       
Machine = Body()
Machine.ventana.mainloop()


Saludos!
Sokoleonardo
Sokoleonardo
Moderador de Seccion
Moderador de Seccion

Mensajes : 52
Nivel : 138
Reputación : 4
Fecha de inscripción : 04/08/2011
Vive en Vive en : Argentina

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.