[Duda Python+TK] Sobre variables y funciones

Iniciado por xassiz_, 25 Febrero 2010, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

xassiz_

A ver, tengo un problema.

Yo hice un "downloader" por consola y ahora estoy aprendiendo Tkinter y lo quería pasar.

Lo que pasa es que cuando ejecuto el button y me ejecuta la funcion las variables del textbox no me funcionan allá..

Probe haciendo un global pero no funciona, os dejo el code:

Código (Python) [Seleccionar]

#!/usr/bin/env python
#Downloader - by xassiz

from Tkinter import *
import re, sys, urllib

def descargar():
xassiz = urllib.urlopen(url)
x4ss1z = open(doc,'wb')
xa55iz = xassiz.read()
x4ss1z.write(xa55iz)
xassiz.close()
x4ss1z.close()

form = Tk()
form.title('Downloader - by xassiz')
form.minsize(350,75)

Nombre = Label(form, text="Downloader")
url = StringVar()
urlTxtBox = Entry(form, textvariable=url, width=60)
doc = StringVar()
docTxtBox = Entry(form, textvariable=doc, width=60)
BotonDescargar = Button(form, text="Descargar", command=descargar, width=20)

Nombre.grid()
urlTxtBox.grid()
docTxtBox.grid()
BotonDescargar.grid()

form.mainloop()


El primer textbox recojo la URL y en el segundo el nombre del nuevo archivo.


Saludos! ;)



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE

43H4FH44H45H4CH49H56H45H

Este ejemplo lo vi hace tiempo:

Código (python) [Seleccionar]
from Tkinter import *
import os
import urllib
import threading
import time

def logs(b):
    f = open('./downloads/log.txt','aw')
    f.write ("Archivo %s" % b + "descargado %s \n" % time.strftime("a Horas: %H:%M:%S en Fecha: %D"))
    f.close()


def reporthook(blocks_read, block_size, total_size):
    if not blocks_read:
        myapp.lab1["text"] = "conexión Establecida"
        return
    if total_size < 0:
        myapp.lab1["text"] = "Bloques Leidos " % blocks_read
    else:
        amount_read = blocks_read * block_size
        myapp.lab1["text"] = "Faltan: %d Kb para terminar la Descarga" %((total_size/1024) -  (amount_read/1024))
        return
   
class Hilo(threading.Thread ):
    def run ( self ):
        try:
            i = 0
            while i==0:
                c = myapp.text3.get(1.0, 2.0)
                b = c[c.rfind('/',0,len(c))+1:len(c)]
                urllib.urlretrieve("%s" % myapp.text3.get(1.0, 2.0), 'downloads/%s' % b, reporthook=reporthook)
                myapp.lab1["text"] = "ARCHIVO %s DESCARGADO" % b
                logs(b)

                myapp.text3.delete(1.0, 2.0)

                if myapp.text3.search("http://", 1.0, 1.7):
                    myapp.lab1["text"] = "CONTINUANDO DESCARGA"
                    continue;
                else:
                    myapp.lab1["text"] = "NO HAY URLS PARA DESCARGAR"
                    break;
                                     
        except:
           myapp.lab1["text"] = "ERROR VERIFIQUE conexión Y DIRECCION URL"

class Application(Frame):

   
    def limpiar(self):
        myapp.text3.delete(1.0, END)

     
    def download(self):
        if os.path.exists("downloads")==0:
            os.makedirs("downloads")

        Hilo().start()
       
    def salir(self):

        myapp.master.destroy()
        exit()


    def agregar(self):

        myapp.text3.insert(END, myapp.text3.clipboard_get()+"\n")
                     
    def createWidgets(self):

        self.lab0 = Label(self)
        self.lab0["text"] = "INTRODUCE DIRECCION A DESCARGAR"
        self.lab0["fg"]   = "white"
        self.lab0["bg"]   = "black"
        self.lab0["width"]   = 50
        self.lab0["height"]   = 3
        self.lab0.pack({"side": "top"})


        self.lab1 = Label(self)
        self.lab1["text"] = "CONTADOR DESCARGA PREPARADO"
        self.lab1["fg"]   = "white"
        self.lab1["bg"]   = "black"
        self.lab1["width"]   = 80
        self.lab1["height"]   = 3
        self.lab1.pack({"side": "top"})


        self.but1 = Button(self)
        self.but1["text"] = "AGREGAR URL DEL PORTAPAPELES"
        self.but1["fg"]   = "white"
        self.but1["bg"]   = "blue"
        self.but1["width"]   = 30
        self.but1["height"]   = 2
        self.but1["border"]   = 4
        self.but1.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but1["command"] = self.agregar
        self.but1.pack({"side": "top"})       



        self.text3 = Text(self)
        self.text3["fg"]   = "white"
        self.text3["bg"]   = "black"
        self.text3["width"]   = 80
        self.text3.pack({"side": "top"})


        self.but2 = Button(self)
        self.but2["text"] = "SALIR"
        self.but2["fg"]   = "white"
        self.but2["bg"]   = "blue"
        self.but2["width"]   = 10
        self.but2["height"]   = 3
        self.but2["border"]   = 4
        self.but2.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but2["command"] = self.salir
        self.but2.pack({"side": "left"})

        self.but3 = Button(self)
        self.but3["text"] = "LIMPIAR LISTA URL'S"
        self.but3["fg"]   = "white"
        self.but3["bg"]   = "blue"
        self.but3["width"]   = 30
        self.but3["height"]   = 3
        self.but3["border"]   = 4
        self.but3.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but3["command"] = self.limpiar
        self.but3.pack({"side": "left"})

     
        self.but4 = Button(self)
        self.but4["text"] = "INICIAR LAS DESCARGAS"
        self.but4["fg"]   = "white"
        self.but4["bg"]   = "blue"
        self.but4["width"]   = 30
        self.but4["height"]   = 3
        self.but4["border"]   = 4
        self.but4.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but4["command"] =  self.download
        self.but4.pack({"side": "right"})


    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()
       

myapp = Application()
myapp.master.title("DOWNLOADER EN LINUX - GET LINUX")
myapp.master.geometry("+600+600")
myapp.master.tk_setPalette("black")
myapp.master.resizable(0,0)

myapp.mainloop()


Espero te sirva, necesitas trabajar con hilos...

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

XD YO

#2
Tu problema radica en la función descargar:

Citar
Código

#!/usr/bin/env python
#Downloader - by xassiz

from Tkinter import *
import re, sys, urllib

def descargar():
   xassiz = urllib.urlopen(url) #En ese lugar debería ser xassiz = urllib.urlopen(url.get())
   x4ss1z = open(doc,'wb') #En este lugar  x4ss1z = open(doc.get(),'wb')
   xa55iz = xassiz.read()

Al ser tus variables que almacenan las cadenas "url" y "doc" , necesitas decirle a tkinter que quieres tener acceso a las cadenas almacenadas añadiendo al final del nombre  ".get()"

Pero, tengo que admitirlo, el código de 43H4FH44H45H4CH49H56H45H  no es para un principiante en tkinter; pero esta muy bueno  ;-)
"Fácilmente aceptamos la realidad, acaso porque intuimos que nada es real"
-Borges -El inmortal

xassiz_




YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE