elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python/Tk]Mi Programa se ríe de mi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python/Tk]Mi Programa se ríe de mi  (Leído 2,924 veces)
AdeLax

Desconectado Desconectado

Mensajes: 63



Ver Perfil WWW
[Python/Tk]Mi Programa se ríe de mi
« en: 9 Agosto 2013, 20:09 pm »

Hola buenas a todos!

Les traigo una cosa muy curiosa que me pasa, no se si es mi programa, la función 'os.listdir()' , un error, o soy estúpido...

Les traigo este script, que funciona para moverse entre carpetas de forma visual, esta en desarrollo, el programa, lista todos los archivos y carpetas, tu selecionas una carpeta, NO un archivo, y lista los archivos de esa carpeta, pero si lo vuelvo a hacer en otro directorio me da error!  :-[ :-[ :-[

Les traigo el script para que lo miren:

Código:
from Tkinter import *
import sys
import os
 
v0=Tk()
v0.geometry("1000x1000")
 
def colocar_scrollbar(listbox,scrollbar):
    scrollbar.config(command=listbox.yview)
    listbox.config(yscrollcommand=scrollbar.set)
    scrollbar.pack(side=RIGHT, fill=Y)
    listbox.pack(side=LEFT, fill=Y)
 
frame1=Frame(v0)
frame1.pack()
scroll1=Scrollbar(frame1)
list1=Listbox(frame1)
list1.pack()
colocar_scrollbar(list1,scroll1)
mitexto=StringVar()
label1=Label(v0,textvar=mitexto)
label1.pack()




 
def cargarlistbox(lista,listbox):
    ind,largo=0,len(lista)
    while ind < largo:
        listbox.insert(END,lista[ind])
        ind+=1
 
ListaNombres = os.listdir(os.getcwd())
 
def imprimir_en_label():
    label1.after(100, imprimir_en_label) # Llamada recursiva con .after
    ind = list1.curselection()
    if list1.curselection() != ():
        sel = list1.get(ind)
        mitexto.set(sel) #



def funcion_milagro():                       
    ind = list1.curselection()
    if list1.curselection() != ():
        sel2 = list1.get(ind)
        print sel2                           #Todo esto funciona bien,

                                             #pero al segundo cambio de directorio                                                                                                 
        rut = os.getcwd() + '\\' + sel2
        #os.system('cd /d ' + rut)
        print rut
        print rut

        list1.delete(0, END)

        archis = os.listdir(rut)              # Me salta error como que no existe el directorio
                                              #funcionando bien a la primera
        print archis
           

        for imagen in archis:
            list1.insert(END,imagen)
       



       
b1=Button(v0,text="Siguiente", command = funcion_milagro, width=15).place(x=435, y=180)

 
cargarlistbox(ListaNombres,list1)
imprimir_en_label()
funcion_milagro()
 
v0.mainloop()

Guardenlo como .py para visualizar el error en consola

Es como que no existiese ese directorio, aparte e puesto un par de prints por si acaso era error de otra funcion o variable, pero no por lo que e visto es el listdir creo.

Ojala alguien me pueda dar una solución seria de mucho agrado  :D :D



En línea

Once

Desconectado Desconectado

Mensajes: 120


Ver Perfil WWW
Re: [Python/Tk]Mi Programa se ríe de mi
« Respuesta #1 en: 11 Agosto 2013, 05:21 am »

El problema es que estas trabajando sobre la ruta en la que está el script (os.getcwd()) así que lo que tienes sólo te sirve para las carpetas que esten al mismo nivel que el script.

Supon que en la raíz del disco C: tienes tu script y la carpeta "Nueva" y dentro de la carpeta "Nueva" tienes otra carpeta con el nombre: "Más nueva"

Cuando haces os.getcwd() te regresa c:/ si intentas entrar a "Nueva" la ruta te quedaria: C:/Nueva (no da errores, la carpeta existe) pero cuando intentas entrar a "Más nueva" la ruta te quedaria: C:/Más nueva (que no existe) la ruta verdadera seria: C:/Nueva/Más nueva

Y un par de sugerencias:

En lugar de usar:
Código
  1. rut = os.getcwd() + '\\' + sel2
usa os.path.join()
Código
  1. rut = os.path.join(os.getcwd(), sel2)

Declara primero las funciones y luego coloca el código principal

También puedes usar la función os.path.isdir() para que evites esos errores cuando no se selecciona un directorio.

Saludos!


En línea

AdeLax

Desconectado Desconectado

Mensajes: 63



Ver Perfil WWW
Re: [Python/Tk]Mi Programa se ríe de mi
« Respuesta #2 en: 11 Agosto 2013, 12:19 pm »

Muchas gracias por la respuesta!  :D

Me ayudaste mucho
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] Evolución y resultado de un programa
Scripting
thestrass 3 3,136 Último mensaje 11 Enero 2012, 18:00 pm
por D4RIO
PROGRAMA EN PYTHON
Scripting
D@V1D94 2 5,502 Último mensaje 31 Enero 2012, 20:30 pm
por D@V1D94
AYUDA con un programa en python soy muy novato!!!
Scripting
d0menek0r 2 2,484 Último mensaje 5 Febrero 2012, 17:09 pm
por d0menek0r
PROGRAMA EN PYTHON AYUDA URGENTE
Scripting
viki_297 1 3,187 Último mensaje 15 Junio 2012, 03:22 am
por criskapunk
Problema programa Python
Scripting
Akendore 4 3,300 Último mensaje 7 Septiembre 2015, 19:33 pm
por Akendore
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines