
Código de ejemplo de un cliente FTP en modo gráfico
Python
7.865 visualizaciones desde el 24 de Abril del 2012
Código de ejemplo de un cliente FTP con interfaz gráfica (tkinter).
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Copyright 2012 jose <jose@jose-desktop>
from Tkinter import *
import ftplib,tkMessageBox
class Ftp_Client:
def __init__(self,root):
self.root = root
self.root.title("ClientFtp")
self.top=Menu(self.root)
self.root.config(menu=self.top)
self.file = Menu(self.top)
self.about = Menu(self.top)
self.about.add_command(label="Sobre mi",command=self.informacion,underline=0)
self.file.add_command(label="Abrir nueva ventana",command=self.ventana_x,underline=0)
self.file.add_command(label="Cerrar conexion",command=self.close_conection,underline=0)
self.file.add_command(label="Registro en txt",command=self.guardar_txt,underline=0)
self.top.add_cascade(label="File",menu=self.file)
self.top.add_cascade(label="About",menu=self.about)
self.root.configure(bg="black")
self.root.maxsize("700","550")
self.root.minsize("700","550")
self.url = StringVar()
self.listadescarga = []
self.listasubida = []
self.directorio = StringVar()
Label(self.root,fg="green",bg="black",text="Introduce tu servidor Ftp",justify="center",font=("Helvetica",18)).grid(padx=200)
self.entrada = Entry(self.root,width="40",textvariable=self.url)
self.entrada.grid(pady=15)
self.conectar = Button(self.root,text="Conectar",command=self.conect_Ftp)
self.conectar.grid(pady=15)
Label(self.root,fg="green",bg="black",text="Directorios",font=("Helvetica",16)).grid(pady=15)
self.listbox = Listbox(self.root,width="60")
self.listbox.grid(row=4,column=0)
self.directorios = Entry(self.root,textvariable=self.directorio,width="30")
self.directorios.grid(pady=15)
self.download = Button(self.root,text="Download",command=self.panel_descarga)
self.download.grid(row=7)
self.delete = Button(self.root,text="Eliminar")
self.delete.grid(row=7,padx=465,columnspan=500)
self.avanzar = Button(self.root,text="Avanzar",command=self.avanzar)
self.avanzar.grid(row=6,column=0,padx=380,columnspan=270)
self.renombrar = Button(self.root,text="Rename")
self.renombrar.grid(row=6,padx=380,columnspan=750)
self.retroceder = Button(self.root,text="Retroceder")
self.retroceder.grid(row=6,pady=10)
self.upload = Button(self.root,text="Upload",command=self.panel_subida)
self.upload.grid(row=7,column=0,padx=290,columnspan=260)
def conect_Ftp(self):
try:
self.conectftp = ftplib.FTP(self.entrada.get())
self.window = Tk()
self.window.maxsize("300","280")
self.window.minsize("300","280")
self.window.title("Conectar Con Servidor")
self.window.configure(bg="black")
Label(self.window,fg="green",bg="black",text="Panel de Logueo",font=("Helvetica",15)).grid(padx=70)
self.user = StringVar()
self.password = StringVar()
Label(self.window,fg="green",bg="black",text="Usuario").grid(pady=10)
self.usuario = Entry(self.window,width="20",textvariable=self.user)
self.usuario.grid(pady=10)
Label(self.window,fg="green",bg="black",text="Password").grid(pady=10)
self.enpassword = Entry(self.window,width="20",textvariable=self.password)
self.enpassword.grid(pady=10)
self.logueo = Button(self.window,text="Loguear",command=self.log_Ftp)
self.logueo.grid(pady=15)
self.window.mainloop()
except:
tkMessageBox.showinfo("Error","No existe el servidor")
def log_Ftp(self):
try:
self.conectftp.login(self.usuario.get(),self.enpassword.get())
self.datos = [self.usuario.get(),self.enpassword.get()]
self.window.destroy()
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","User y Pass Incorrectos")
def listar_directorios(self):
self.listbox.delete(0,END)
self.listadir = []
self.listbox.insert(END,"----Directorios----")
for self.directorio in self.conectftp.nlst():
self.listbox.insert(END,self.directorio)
self.listadir.append(self.directorio)
def avanzar(self):
try:
self.conectftp.cwd(self.directorios.get())
self.listar_directorios()
except:
tkMessageBox.showinfo("Error","No existe el directorio")
def panel_descarga(self):
self.paneldescarga = Tk()
self.paneldescarga.maxsize("300","200")
self.paneldescarga.minsize("300","200")
self.paneldescarga.title("Download")
self.paneldescarga.configure(bg="black")
Label(self.paneldescarga,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
self.nombre = StringVar()
self.nombreguardado = Entry(self.paneldescarga,textvariable=self.nombre)
self.nombreguardado.grid(pady=10)
self.guardar = Button(self.paneldescarga,text="Guardar",command=self.descarga)
self.guardar.grid(pady=10)
self.paneldescarga.mainloop()
def descarga(self):
try:
self.listadescarga.append(self.directorios.get())
self.archivolocal = open(self.nombreguardado.get(),'wb')
except:
tkMessageBox.showinfo("Error","No se ha podido guardar el archivo")
self.paneldescarga.destroy()
try:
self.conectftp.retrbinary('RETR '+self.directorios.get(),self.archivolocal.write)
self.paneldescarga.destroy()
except:
tkMessageBox.showinfo("Error","No existe el archivo")
def informacion(self):
tkMessageBox.showinfo("Sobre Mi","ClienteFtp 1.0 By Rune, alumno de 2 bachiller en el centro EPLA de valencia")
def ventana_x(self):
self.root2 = Tk()
self.instancia = ventana_2(self.root2)
def guardar_txt(self):
try:
if self.datos[0] == "":
self.usuario = "anonymous"
if self.datos[1] == "":
self.contrasena = "anonymous"
self.archivodatos = open("Backup"+self.entrada.get()+".txt","a")
self.archivodatos.write("-------------------------------------------\n")
self.archivodatos.write("Conexion con: "+self.entrada.get()+"\n")
self.archivodatos.write("Usuario--->" +self.usuario +"\n")
self.archivodatos.write("Password--->" + self.contrasena + "\n")
self.archivodatos.write("---Directorios Visualizados Del Servidor---\n")
for self.direct in self.listadir:
self.archivodatos.write(self.direct+"\n")
self.archivodatos.write("\n---Archivos Descargados---\n")
for self.archiv in self.listadescarga:
self.archivodatos.write(self.archiv + "\n")
self.archivodatos.write("\n---Archivos Subidos---\n")
for self.archivo in self.listasubida:
self.archivodatos.write(self.archivo + "\n")
self.archivodatos.close()
except:
tkMessageBox.showinfo("Error","Compruebe que ha inicializado alguna conexion")
def panel_subida(self):
self.panelsubida = Tk()
self.panelsubida.maxsize("350","200")
self.panelsubida.minsize("350","200")
self.panelsubida.title("Upload")
self.panelsubida.configure(bg="black")
Label(self.panelsubida,text="Introduce el nombre del archivo junto con su directorio",bg="black",fg="green").grid(pady=10)
self.nombrex = StringVar()
self.nombrex2 = StringVar()
self.nombreguardados = Entry(self.panelsubida,textvariable=self.nombrex)
self.nombreguardados.grid(pady=10)
Label(self.panelsubida,text="Introduce el nombre para guardar el archivo",bg="black",fg="green").grid(pady=10)
self.nombresubir = Entry(self.panelsubida,textvariable=self.nombrex2)
self.nombresubir.grid(pady=10)
self.subir = Button(self.panelsubida,text="Subir",command=self.subida)
self.subir.grid(pady=10)
self.panelsubida.mainloop()
def subida(self):
try:
self.archivo_origen = open(self.nombreguardados.get(),"rb")
except:
tkMessageBox.showinfo("Error","El archivo no existe")
try:
self.conectftp.storbinary('STOR ' + self.nombresubir.get(),self.archivo_origen)
except:
tkMessageBox.showinfo("Error","No se ha podido subir el archivo")
self.listasubida.append(self.nombreguardados.get())
self.panelsubida.destroy()
def close_conection(self):
try:
self.conectftp.close()
self.listbox.delete(0,END)
except:
tkMessageBox.showinfo("Error","Compruebe que ha inicializado una conexion")
class ventana_2(Ftp_Client):
pass
if __name__ == "__main__":
root = Tk()
instance = Ftp_Client(root)
root.mainloop()
Comentarios sobre la versión: Versión 1 (2)