Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Erik# en 23 Octubre 2008, 21:44 pm



Título: [Python] Curso de Python con Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 21:44 pm
Curso de Python con Interfaces graficas TK

1.Introducción

Me di cuenta de el lenguaje python complementandolo con TK (Tool Kit) se podria hacer cosas grandes, por eso, voy a enseñaros de lo más basico a crear juegos.
Puede que no llegueis a hacer juegos como con PyGame, porque, TK, principalmente es un entorno grafico más de texto, pero vereis que sera de gran utilidad.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 21:44 pm
2.Conseguimos TK

Principalmente, este curso sera orientado a Linux, por supuesto, hacia debian, pero igualmente, intentare ser muy global.
Para conseguir TK para python en windows con activepython o python 2.5.2 ya nos viene por defecto.

En Linux, para descargarlo, buscamos los paquetes python-tk si usamos algun deribado de debian o el mismo y si usamos otra distro buscamos por google...


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 21:45 pm
3.Activando los modulos de TK

Para activar los modulos de TK, nosotros utilizaremos esto:

Código
  1. from Tkinter import *

Hay otra forma que es:

Código
  1. import Tkinter

Pero yo aconsejo la primera, que es al que se lleva utilizando de toda la vida.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 21:45 pm
4.Creando un formulario (vacío)

Para crear los forms, primero importaremos:

Código
  1. from Tkinter import *

Despues, utilizaremos la función:

Código
  1. root = Tk()

Que creara un identificador, y por ultimo, cerramos el identificar:

Código
  1. root.mainloop()

El resultado del código total, sera:

Código
  1. from Tkinter import *
  2. root = Tk()
  3. root.mainloop()

Cuando inicieis esto, vereis que ya tenemos nuestro formulario vacío.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 21:45 pm
5.Nuestra primera aplicación, hola mundo

Como siempre, en todos los lenguajes, la primera aplicación es hola mundo, y ahora vereis como se crea un label, espero que se os quede, porque aparte de crear la aplicación aprendemos lo basico sobre labels.
Primero, debemos poner todo el código que hemos aprendido al crear forms.

Código
  1. from Tkinter import *
  2. root = Tk()
  3. root.mainloop()

Y ahora, como os dije antes, root sera importante, fijaros:

Código
  1. holamundo = Label(root, text="¡Hola Mundo!")

Como veis, creamos el declarador llamado holamundo, que contiene un widget de caracter "LABEL", antes de nada, usaremos root para que el programa identifique esa funcion como tkinter, y luego, usamos una coma y ponemos text=, que sera la función que usaremos para introducir una variable, algun texto, etc...

Pero despues de esto, si lo comprobais antes de pasar a este siguiente punto, vereis que no sale nada o os da error.
Pues, para declarar este label en el form y ahora atentos, podreis utilizar dos formas, pack o grid, pack, hace un autoajuste y lo coloca donde el desea, pero con grid, puedes elegir columnas, lineas, situación...
Nosotros usaremos grid para elegir columnas y lineas, y ahora llega el toque final:

Código
  1. holamundo.grid(row=1, column=1)

Y ahora si juntamos todo:

Código
  1. from Tkinter import *
  2. root = Tk()
  3. holamundo = Label(root, text="¡Hola Mundo!")
  4. holamundo.grid(row=1, column=1)
  5. root.mainloop()


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Ari--Slash en 23 Octubre 2008, 21:55 pm
exeleeenteee.....

he buscado mucho uno claro como este

 ;D

gracias esta muy bueno

salu2


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 22:06 pm
Aun seguire haciendolo, esto solo es el principio.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 23 Octubre 2008, 22:18 pm
6.Empezamos con los buttons

Los widgets buttons, sirven para efectuar una función.
Esa función se declara antes con def(): y despues se introduce una subfuncion en el button llamada command, pero eso lo veremos más tarde en este fasciculo.
Lo primero es la declaración de sintaxis:

Código
  1. nombre = Button(root, texto del boton, comando de funcion, tamaño de ancho y/o alto)
  2. grid.nombre(linea, columna)

Esta sintaxis es la que necesitaremos para crear un button, ahora, profundicaremos en cada una de estas partes.
Primero, el texto del boton, es el tipico "label" que saldra en un boton, por ejemplo si queremos que el boton ponga "De acuerdo" escribiremos:
Código
  1. Button(... text="De acuerdo" ...)
En ese de acuerdo, podemos poner lo que queramos.
Ahora seguiremos con el comando de función, bueno, esto, antes de nada, tenemos que crear la función que queremos con lambda o def, nosotros usaremos def, bueno, la sintaxis de def es:

Código
  1. def nombre de la funcion():
  2.   código de la función

En el nombre de la función, pondremos como queremos que se llame la función, en el ejemplo que haremos más adelante se llamara holamundo.
Y donde código de función ponemos el codigo que queremos, en nuestro caso para el ejemplo final pondremos:

Código
  1. holamundolbl = Label(root, text="Hola Mundo")
  2. holamundolbl.grid(row=2, column=1)

Muy bien, una vez tenemos el nombre de la funcion y el código, donde command=, pondremos:

Código
  1. Button(...command=holamundo...)

Esto llamara a la función holamundo, y por ultimo, veremos el ancho o alto del button, nosotros por defecto siempre usaremos el width=20, que es el ancho de 20.

Código
  1. Button(...width=20)

Muy bien, ahora que ya tenemos nuestro button y sus partes, haremos el ejemplo:

Código
  1. def holamundo():
  2.   holamundolbl = Label(root, text="Hola Mundo")
  3.   holamundolbl.grid(row=2, column=1)
  4. holamundo = Button(root, text="Activar Hola Mundo", command=holamundo, width=20)
  5. holamundo.grid(row=1, column=1)

Muy bien, y ahora complementamos los modulos y funciones de formulario:

Código
  1. from Tkinter import *
  2. def holamundo():
  3.   holamundolbl = Label(root, text="Hola Mundo")
  4.   holamundolbl.grid(row=2, column=1)
  5. root = Tk()
  6. holamundo = Button(root, text="Activar Hola Mundo",command=holamundo, width=20)
  7. holamundo.grid(row=1, column=1)
  8. root.mainloop()

Listo, lo probamos y et voila, button activado.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: ^Tifa^ en 24 Octubre 2008, 15:04 pm
Entonces puedo postear un tutorial de Perl/Tk??? o TCL/Tk por igual???  :laugh:

creo que seria interesante....

Por cierto, sino me equivoco esta linea :

root = Tk();

Inicia un objeto widget llamemosle parent window o ventana padre.

y esto :

root.mainloop();

Finaliza el objeto antes iniciado o ventana padre... y Mainloop es el encargado de manejar y manipular todos los eventos que ocurran durante el codigo digase, presionar botones, presentar una informacion en un cuadro de texto, etc...

 ;)


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: NetJoe en 24 Octubre 2008, 16:30 pm
 
    Me parece muy bien tu tutorial, ya hace algunos meses que he estado desarrollando scripts usando python y ya le podre hacer una interfaz grafica a mis scripts.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: TonyElGordo en 2 Diciembre 2008, 15:53 pm
Que bueno, espero que lo continues.
A mi me da error cuando añado dentro de text= caracteres como ¡ .

Dice que Non-ASCII character... Pero lo quito y va genial.


Título: Re: Curso de Python e Interfaces graficas TK
Publicado por: Erik# en 4 Diciembre 2008, 22:11 pm
Seguire pero ahora no tengo tiempo, gracias por seguirlo.


Título: Re: Curso de Python con Interfaces graficas TK
Publicado por: Erik# en 10 Diciembre 2008, 17:49 pm
7.Utilizamos TextBox's


Los textbox's en Python principalmente, hasta más adelante los usaremos con Strings, osea así, cadenas de texto.
Antes que nada, tendriamos que declarar el nombre del textbox como variable de string, eso lo podemos hacer poniendo esto:

Código
  1. mi_variable_string = StringVar()

De esta manera, mi_variable_string que seria el nombre de vuestra variable, sera identificada como String, ahora, vamos a la declaración del textbox.

Código
  1. el_nombre_de_nuestro_textbox = Entry(root, textvariable=mi_variable_string)

De esta manera, nuestro textbox cuando escribamos almacenara ese texto en la variable mi_variable_string.
Para utilizar las variables de string de los TextBox, cuando empleemos ese contenido, tendremos que hacerlo incluyendo .get() al final, nuestro resultado quedaria así, imaginaos que ahora lo queremos mostrar por consola y no por grafica, quedaria algo así:

Código
  1. print mi_variable_string.get()

Espero que os haya gustado esta lección, más adelante aprenderemos a usar numeros en este tipo de variables.


Título: Re: Curso de Python con Interfaces graficas TK
Publicado por: Erik# en 25 Febrero 2009, 14:17 pm
8.CheckBox & IntVar()

Bueno, despues de estar muerto varios meses (2) he decidido continuarlo y lo continuamos con el checkbox e introduciendo las variables numericas en Tk.
Cuando comence con esto del PyTk habia un error que me mataba, no sabia construir variables numericas en Python, pero pensando un poco probe varias combinaciones IntegerVar(), VarInt(), VarInteger()... hasta que probe IntVar() y lo consegui, el resultado de una variable numerica:

Código
  1. mi_int_var = IntVar() # Creando una variable numerica

Y bien, volviendo al tema principal, hablaremos sobre los checkbox, para los que no sabes que es, son unos cuadrados de selección que se utilizan en formularios de contacto, supscripción... Estos cuadrados a diferencia de los RadioButton (los veremos más adelante) solo puede haber 1 clickeado.

Bueno, la syntax del widget checkbutton es la siguiente:

Código
  1. check = CheckButton(root, text="Lo que saldra al lado", var=variable_que_usaremos)
  2. check.grid()

Donde check seria el nombre de nuestro widget, CheckButton indicamos que sera un Cuadrado de selección, root es nuestro identificador, Lo que saldra al lado es lo que saldria al lado para informar que pasa o que seleccionas al clickar ese cuadrado y variable_que_usaremos es la variable con la que identificamos nuestro checkbutton.

Un ejemplo sencillo seria este:

Código
  1. var = IntVar()
  2. check = Checkbutton(root, text="Hola mundo", variable=var)
  3. check.grid()

Y ahora podriamos saber si ese cuadrado ha sido seleccionado haciendo un if:

Código
  1. def funcion_presionada_por_button():
  2.   if var.get():
  3.      print "El checkbutton fue seleccionado"
  4.   else:
  5.      print "El checkbutton no fue seleccionado"
  6.  

De esta manera le decimos que si la variable var del checkbutton contiene algo osea así una seleccion nos salga algo y por contra otra cosa, donde funcion_presionada_por_button es la funcion o mejor llamado el command que llamamos desde un button creado por nosotros.

Y ahora, os dejo un ejemplo total para que practiqueis y lo veais más claro:

Código
  1. from Tkinter import *
  2. def verificar():
  3. if var.get():
  4. print "El checkbutton fue seleccionado"
  5. else:
  6. print "El checkButton no fue seleccionado"    
  7. root = Tk()
  8. var = IntVar()
  9. check = Checkbutton(root, text="Seleccionado/ No seleccionado", variable=var)
  10. cm = Button(root, text="Verificar", command=verificar, width=20)
  11. check.grid()
  12. cm.grid()
  13. root.mainloop()

Si me equivoque en algo o quereies preguntar algo, postear.
En la próxima lección aprenderemos los textarea :)


Título: Re: Curso de Python con Interfaces graficas TK
Publicado por: Infernal.Root en 25 Febrero 2009, 19:20 pm
Gracias esta muy bien explicada la info,

                               Atte: Infernal.Root


Título: Re: Curso de Python con Interfaces graficas TK
Publicado por: Banti en 25 Febrero 2009, 19:33 pm
 :o :o

Este thread ni lo habia visto!!!!
Voy a leerlo esta noche!


Título: Re: Curso de Python con Interfaces graficas TK
Publicado por: Erik# en 25 Febrero 2009, 19:47 pm
9.Nuestra segunda aplicación, Calculadora básica

Antes que nada agradecer a todos los que leen el curso :)
Y bueno, os dejo este código con lo que hemos ido aprendiendo.
Hay algunas cosas que olvide, son pequeñas cosas que algunas di por sentadas y otras ni me acorde...
Desde nuestro identificador podemos definir el titulo de nuestra ventana:

Código
  1. identificador.title('Nombre de la aplicacion')

Si sigues el curso sabras que el identificador es root, y bueno, otra cosa es que las columnas y las linias (row, column) empiezan en 0,0 , osea así la row principal es 0 y la column principal es 0.

Y bueno, aqui os dejo la aplicación de aprendizaje:

Código
  1. from Tkinter import *
  2. def calc_sumar():
  3. print a.get()+b.get()
  4. lblt = Label(root, text="Total: " + str(a.get()+b.get()))
  5. lblt.grid(row=3, column=0)
  6. def calc_restar():
  7. print a.get()-b.get()
  8. lblt = Label(root, text="Total: " + str(a.get()-b.get()))
  9. lblt.grid(row=3, column=0)
  10. def calc_mult():
  11. print a.get()*b.get()
  12. lblt = Label(root, text="Total: " + str(a.get()*b.get()))
  13. lblt.grid(row=3, column=0)
  14. def calc_div():
  15. print a.get()/b.get()
  16. lblt = Label(root, text="Total: " + str(a.get()/b.get()))
  17. lblt.grid(row=3, column=0)
  18. root = Tk()
  19. root.title('PyCalk - Python/TK')
  20. a = IntVar()
  21. b = IntVar()
  22. atxt = Entry(root, textvariable=a,width=15)
  23. btxt = Entry(root, textvariable=b,width=15)
  24. cbs = Button(root, text="Sumar", command=calc_sumar,width=10)
  25. cbr = Button(root, text="Restar", command=calc_restar,width=10)
  26. cbm = Button(root, text="Multiplicar", command=calc_mult,width=15)
  27. cbd = Button(root, text="Dividir", command=calc_div,width=10)
  28. atxt.grid()
  29. btxt.grid()
  30. cbs.grid(row=0, column=1)
  31. cbr.grid(row=1, column=1)
  32. cbm.grid(row=2, column=0)
  33. cbd.grid(row=2, column=1)
  34. root.mainloop()
  35.  

Datos:

Nombre: PyCalk (Python Calculadora TK)
Lineas: 34
Funciones: 4
Nombre real: Calculadora básica de cuatro operaciones (Añadirle más si quereis con la libreria math :))


Título: Re: [Python] Curso de Python con Interfaces graficas TK
Publicado por: Erik# en 1 Marzo 2009, 22:32 pm
10.Textarea e incluimos los scrollbar

Bueno, despues de todo un fin de semana sin internet, por estar fuera de mi casa [...] Ya puedo porfin escribir lo que queria sobre los textarea que incluye documentación sobre scrollbar...
En esta lección usaremos mucho la X y la Y, como ya sabreis mucho son las variables que señalan las coordenadas o las posiciones X = Horizontal, Y = Vertical :).
Bueno, vamos allá...

Primero, la sintaxis de un textarea, pues, es simple, como todos los widgets de las interfaces TK en Python:

Código
  1. <nombre_del_textarea> = Text(<identificador>, height=h, width=w)

Como veis, en <nombre_del_textarea> sera la variable que defina el textarea, donde Text es el nombre del widget con el que identificamos, el <identificador> es el identificador TK que declaramos al inicio, en el curso por defecto es root, height=h es la altura de largo y width=w de ancho, por defecto, en el curso usaremos h = 20, w = 40, y nos quedara algo así:

Código
  1. textarea = Text(root, height=20, width=40)

Como veis  cumplimos los requisitos básicos del widget, pero tendriamos un problema, al añadir mucho contenido de texto, perdiriamos el hilo, pues no tenemos un objeto en todo caso un scrollbar que nos suba o nos baje para ver todo el texto, para eso como he mencionado varias veces anteriormente usaremos un scrollbar, su sintaxis es:

Código
  1. <nombre_del_scrollbar> = Scrollbar(<identificador>, command=<nombre_del_textarea>.<funcion_de_vista>)

Donde nombre del scrollbar ponemos la variable que guarda nuestro widget, la palabra Scrollbar identifica como scrollbar nuestro objeto, el identificador es el identificador TK que declaramos anteriormente, en el curso por defecto es TK, <nombre_del_textarea> seria el nombre de la variable que usamos anterior mente y luego separado por un punto <funcion_de_vista>, puede ser X o Y, nostros, por defecto usaremos la Y, que es vertical, ejemplo:

Código
  1. scroll = Scrollbar(root, command=textarea.yview)

Como veis, le llamamos scroll, lo identificamos como un scrollbar, usamos nuestro identificador tk que inicia los objetos que es "root", y luego como veis añadimos el nombre de nuestro textarea y le añadimos una vista horizontal con el yview, si quereis, cambiando y por x podeis conseguir una vista horizontal.

Ahora tenemos de configurar al textarea indicandole que tiene un scrollbar preparado, ¿como lo hacemos? con la funcion configure:

Código
  1. <nombre_del_textarea>.configure(yscrollcommand=<nombre_del_scrollbar>.set)

Donde nombre del textarea ponemos el nombre de la variable y donde nombre del scrollbar idem, pero con el del scrollbar...

y por ultimo, declaramos las posiciones de inicio de nuestros objetos, primero el textarea, le indicamos que señalara que el textarea se pondra a la izquierda (<):

Código
  1. <nombre_del_textarea>.pack(side=LEFT)

donde nombre del textarea ponemos la variable, y como veis con pack indicamos la fijación de lugar y con side la posicion.

Y con el scrollbar, algo parecido:

Código
  1. <nombre_del_scrollbar>.pack(side=RIGHT, fill=Y)

En el nombre del scrollbar el nombre de la variable, con el pack fijamos el lugar, con side indicamos que ira a la derecha del textarea y con fill indicamos si sera horizontal o vertical y por supuesto ponemos vertical (siempre tiene que estar en mayúscula (Y,X)).

Y aqui os dejo un ejemplo total:

Código
  1. from Tkinter import *
  2. root = Tk()
  3. textarea = Text(root, height=20, width=40)
  4. scroll = Scrollbar(root, command=textarea.yview)
  5. textarea.configure(yscrollcommand=scroll.set)
  6. textarea.pack(side=LEFT)
  7. scroll.pack(side=RIGHT, fill=Y)
  8. root.mainloop()

Pronto más info.
Espero que os haya gustado, buenas noches :)


Título: Re: [Python] Curso de Python con Interfaces graficas TK
Publicado por: Dreykon en 12 Septiembre 2010, 02:27 am
muy bueno, bien explicado. me funciono exelente :D :D