Mostrando las entradas con la etiqueta Tkinter. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Tkinter. Mostrar todas las entradas

jueves, 22 de noviembre de 2018

Sencilla animacion en python

En esta ocasion, veremos como crear una animacion muy sencilla con el modulo Tkinter y las funciones que un canvas nos permite utilizar.

Sintaxis del programa:



import Tkinter
import time

WIDTH=500
HEIGH=400

root=Tkinter.Tk()
canvas= Tkinter.Canvas(root,width=WIDTH,heigh=HEIGH)
root.title("Animacion")

canvas.pack()
ball=canvas.create_oval(10,10,60,60,fill='red')


for i in range(400):
    canvas.move(ball,1,0)
    root.update()
    time.sleep(0.05)
root.mainloop()


Si bien, durante esta animacion solo veras como el circulo se desplaza hacia la derecha poco a poco.
Esto es debido a lo que tenemos en la funcion canvas.move()

Esta funcion nos pide 3 parametros; objeto que vamos a mover, su coordenada x y coordenada y de cuanto se ira moviendo. Si colocamos solo la funcion sin el root.update o time.sleep, veras solamente el circulo hasta el extremo derecho de tu ventana tk.
Esto es porque, la funcion update de tu objeto tk, le permite ir actualizando la posicion del objeto a mover. Con esto, podras ver cada una de sus actualizaciones en el tiempo que va cambiando de coordenadas. Si a eso le agregamos el time.sleep, la animacion se vera mas fluida.





UPDATE...









miércoles, 21 de noviembre de 2018

Programa que agrega peliculas

Sintaxis del programa:



from Tkinter import *
from tkMessageBox import *
aux=0

def agregar_pelicula():
    Seleccion=pelicula.get()
    peliculas.append(Seleccion)
    peliculas_lista = OptionMenu(ventanap, index, *peliculas).place(x=300, y=82)




def quitar_pelicula():
    Seleccion=pelicula.get()
    peliculas.remove(Seleccion)
    peliculas_lista = OptionMenu(ventanap, index, *peliculas).place(x=300, y=82)

ventanap=Tk()
ventanap.geometry("400x250")
ventanap.title("Peliculas")
Label(ventanap,text="Escribe el titulo de una pelicula").place(x=30,y=55)
Label(ventanap,text="Peliculas").place(x=300,y=55)
pelicula=StringVar()
nombre=Entry(ventanap,textvariable=pelicula,width=34).place(x=20,y=90)
peliculas=[]
index=StringVar()
#peliculas_lista = OptionMenu(ventanap, index,*peliculas).place(x=300, y=82)
Button(ventanap,text="Agregar",command=agregar_pelicula).place(x=70,y=120)
Button(ventanap,text="Quitar",command=quitar_pelicula).place(x=140,y=120)
ventanap.mainloop()


Corrida del programa:






Programa que muestra la ruta de un programa

Sintaxis del programa:




from Tkinter import *
from tkFileDialog import *

def ruta():
    nombre= askopenfilename()
    Ruta.set(nombre)



root=Tk()
root.geometry("400x200")
Label(root,text="Pulsa el boton y elige una ruta").place(x=50,y=50)
Ruta=StringVar()
Entry(root,textvariable=Ruta,width=42).place(x=50,y=80)
Button(root,text="....",width=5,command=ruta).place(x=320,y=76)


root.mainloop()


Aqui podemos ver que para realizar necesitamos la libreria tkfiledialog, que es la que nos permitira ver las rutas de los archivos que tenemos en nuestro equipo. Asi, al seleccionar el boton activamos la funcion de askopenfilename() para asi asignar esa ruta en un campo de texto libre que se tiene.

Corrida en pantalla:




Generador de numeros al azar

Sintaxis del programa


from Tkinter import *
from random import *

def generar_numero():
    if int(Spin2.get()) > int(Spin1.get()):
        numero=randint(int(Spin1.get()),int(Spin2.get()))
    else:
        numero = randint(int(Spin2.get()), int(Spin1.get()))

    num.set(numero)


ventana=Tk()
ventana.geometry("250x400")
ventana.title("Generador de numeros")
label1=Label(ventana,text="Numero 1").place(x=30,y=50)
label2=Label(ventana,text="Numero 2").place(x=30,y=100)
Spin1=StringVar()
spin1=Spinbox(ventana,values=[1,2,3,4,5,6,7,8,9,10,11,12],textvariable=Spin1).place(x=100,y=50)
Spin2=StringVar()
spin2=Spinbox(ventana,textvariable=Spin2,values=[1,2,3,4,5,6,7,8,9,10,11,12]).place(x=100,y=100)
numero_generado=Label(ventana,text="Numero Generado").place(x=30,y=250)
num=StringVar()
num_entry=Entry(ventana,textvariable=num,width=14).place(x=145,y=250)
boton=Button(ventana,text="Generar",command=generar_numero).place(x=155,y=280)

ventana.mainloop()


En este programa lo que hacemos es darle a la eleccion del usuario que nos determine un rango para asi seleccionar un numero al azar de ese rango que se tiene.
Por ejemplo, al tener el rango 1 al 10, la funcion randoint() nos genera un entero entre dichos rangos.

Nuestros rangos estan dados por dos spin boxes que pueden aumentar o disminuir dependiendo del usuario. Posteriormente, en una caja de texto nos muestra el numero generado.

Corrida en pantalla del programa:



miércoles, 7 de noviembre de 2018

Juego de piedra,papel o tijeras en interfaz grafica. Aporte por Carlos Olvera Magno (Practica No. 19)

Sintaxis del programa:



from Tkinter import *  # libreria para utilizar las ventanas,labels,ventanasemergentes y botones
from tkMessageBox import *  # para poder utilizar el abra el cuadro de dialogo
import random  # para poder generar nuneros aleatorios


def funcion(opcion):
    tiposdemanos = ['piedra', 'papel', 'tijera']  # creo un arreglo con tres valores posibles
    eleccion_aleatoria = random.choice(
        tiposdemanos)  # a la variable le asigno un valor a traves de random utilizando uno de los tres valores que estan en el array
    decisioncpu = eleccion_aleatoria  # la variable decision cpu se iguala
    decision_usuario = opcion  # utilizo como parametro la variable opcion y la igualo a decision usuario para poder usarla en el if

    if decision_usuario == 1:  # el numero uno lo uso como tijera y ese valor se lo asigno al presionar el boton 'piedra'
        Decisionusuario = Label(ventana, text='elegiste piedra', font=("agency fb", 12)).place(x=50, y=220)
        imagen1 = PhotoImage(file='piedrausuario.gif')  # utilizo una imagen para mostrar mi seleccion
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)  # muestro esa image a traves de un label
        DecisionCPU = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300,
                                                                                                          y=220)  # muestro en pantalla la decision random que genero
        if decisioncpu == "piedra":  # la decision random la comparo con cadenas de caracteres en los 3 casos
            imagen2 = PhotoImage(file='piedracpu.gif')  # eligo la imagen determinada
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)  # y la muestro en pantalla
            showinfo(title='resultado',
                     message='empate')  # atravez de una ventana emergente muestro si gano,perdio o empato

        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='perdiste')

        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado', message='Ganaste')



    elif decision_usuario == 2:
        imagen1 = PhotoImage(file='papelusuario.gif')
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)
        Label10 = Label(ventana, text='elegiste papel', font=("agency fb", 12)).place(x=50, y=220)
        Label11 = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300, y=220)
        if decisioncpu == 'piedra':
            imagen2 = PhotoImage(file='piedracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'haz ganado pax'
            showinfo(title='resultado ', message='Ganaste')
        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'empate'
            showinfo(title='resultado', message='empate')

        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'haz perdido!!!!'
            showinfo(title='resultado ', message='perdiste')

    elif decision_usuario == 3:
        imagen1 = PhotoImage(file='tijerausuario.gif')
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)
        Label10 = Label(ventana, text='elegiste tijera', font=("agency fb", 12)).place(x=50, y=220)
        Label11 = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300, y=220)
        if decisioncpu == 'piedra':
            imagen2 = PhotoImage(file='piedracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='perdiste')
        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='ganaste')
        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='empate')


ventana = Tk()
ventana.geometry("500x500")
ventana.title('JUEGO DEL PIEDRA PAPEL O TIJERA')

label1 = Label(text="ELIGA UNO DE LOS 3", font=("agency fb", 18)).place(x=180, y=30)

label3 = Label(ventana, text='PIEDRA,PAPEL O TIJERA:').place(x=120, y=0)
label2 = Label(ventana, text='un juego clasico y sencillo').place(x=250, y=0)
# boton para piedra
Piedra = Button(ventana, text='piedra', command=lambda: funcion(1)).place(x=150, y=100)
# boton para papel
Papel = Button(ventana, text='papel', command=lambda: funcion(2)).place(x=250, y=100)
# boton para tijera
Tijera1 = Button(ventana, text='tijera', command=lambda: funcion(3)).place(x=350, y=100)

ventana.mainloop()


Corrida en pantalla del programa:



martes, 6 de noviembre de 2018

Juego de numero al azar en interfaz grafica. Aporte por Ivan Gutierrez (Practica No. 18)

Sintaxis del programa:

Modificacion 07/11/2018
Se agrego la funcion de limpiar con un boton para que al inicar el juego de nuevo al presionar play, los mensajes no se esten quedando donde originalmente salian antes.


from Tkinter import *
import time
import random
from tkMessageBox import *
import pygame

intento=object
nombre=object
num=object
vidas_disponibles=object
aux=0

def play():
    global nombre,num,vidas_disponibles

    mensaje_usuario.set(nombre.get()+" estoy pensando en un numero entre 1 y 5 " + "crees poder adivinarlo?")
    numeros=[1,2,3,4,5]
    num=random.choice(numeros)
    print num
    vidas_disponibles=random.choice(numeros)
    time.sleep(5)
    vidas_mensaje.set("La suerte dice que tienes: "+str(vidas_disponibles)+" oportunidades")


def Respuesta_usuario():
    global vidas_disponibles,num
    vidas_disponibles-=1

    if int(intento.get())<num:
        showinfo("Muy bajo","Tu estimacion es muy baja")
        vidas_mensaje.set("Te quedan: " + str(vidas_disponibles) + " oportunidades")

    elif int(intento.get())>num:
        showinfo("Muy alto","Tu estimacion es muy alta")
        vidas_mensaje.set("Te quedan: " + str(vidas_disponibles) + " oportunidades")

    if vidas_disponibles==0 or int(intento.get())==num:
        if num == int(intento.get()):
            time.sleep(5)
            showinfo("FELICIDADES!!", "Has ganado el juego")
        elif num != int(intento.get()):
            time.sleep(5)
            showinfo("Mala suerte", "Has perdido :(")


def limpiar():
    mensaje_usuario.set("")
    vidas_mensaje.set("")




juego=Tk()
juego.title("Adivina el numero")
juego.geometry("600x600")
titulo = Label(juego,text="Bienvenido",font=("PhrasticMedium", 30)).place(x=220,y=20)
nombre=StringVar()
usuario=Entry(juego,textvariable=nombre).place(x=195,y=100)
usuario_etiqueta=Label(juego,text="Ingresa tu nombre.").place(x=70,y=100)
mensaje_usuario=StringVar()
vidas_mensaje=StringVar()
vidas= Label(juego,textvariable=vidas_mensaje).place(x=125,y=220)

mensaje2 = Label(juego, text="Intenta adivinar...").place(x=150, y=280)
intento = StringVar()
respuesta_usuario = Entry(juego, textvariable=intento).place(x=260, y=280)

mensaje=Label(juego,textvariable=mensaje_usuario).place(x=125,y=160)
BotonPlay=Button(juego,text="Play",font=("PhrasticMedium", 14),fg="green",command=play).place(x=380,y=90)
BotonComprobar=Button(juego,text="Comprobar respuesta",font=("Arial",14),fg="red",command=Respuesta_usuario).place(x=210,y=350)
BotonReinicio=Button(juego,text="Limpiar",font=("Arial",11),command=limpiar).place(x=260,y=400)

pygame.init()


juego.mainloop()

Corrida en pantalla del programa:





Aplicaciones con interfaz grafica (Practica No. 14)

A lo largo de las siguientes entradas veremos un poco sobre las instrucciones usadas en las interfaces graficas dentro del entorno de python. Probablemente la mayoria de estas ya se hayan visto en otros programas previos,pero en este se iran explicando con mas detalle para un mayor entendimiento.

Programa 1: Uso de mensajes emergentes.


from Tkinter import *
from tkMessageBox import *


def pregunta():
    showerror("Pregunta", "Discuple, no hay preguntas disponibles")


def devolucion():
    if askyesno('Verificar', '¿Realmente quiere salir?'):
        showwarning('Si', 'No está implementado')
    else:
        showinfo('No', 'Salir fue cancelado')


Button(text='Salir', command=devolucion).pack(fill=X)
Button(text='Pregunta', command=pregunta).pack(fill=X)
mainloop()


Como vemos en el codigo del programa, importamos la libreria Tkinter al igual que tkMessageBox para el uso de los mensajes emergentes. Se crean dos metodos: pregunta y devolucion.

Dentro de pregunta se crea un showerror el cual nos arroja el simbolo de error en la ventana creada al igual que el mensaje que se vaya a especificar. Como ejemplo, "Pregunta" sera el titulo que tendra nuestra ventana, y "Disculpe, no hay preguntas disponibles" es el mensaje que tendra nuestra ventana al momento de implementarse dicho metodo.




En el metodo de devolucion, tenemos un askyesno que nos funciona para preguntas con los opciones que regresa una respuesta boleana. Si esta es verdadera, nos va a devolver un showwarning con el mensaje que esa opcion no esta impementada. En cambio, si se presiona en la opcion de negativa, nos regresara un showinfo con el mensaje de que salir ha sido cancelado.




Por ultimo creamos lo que es dos botones para implementar ambos metodos dentro de cada uno. El boton de salir implementa devolucion y el boton de pregunta implementa el metodo de pregunta.




Por ultimo, lo unico que hace es dar inicio al programa con la interfaz en mainloop()





domingo, 4 de noviembre de 2018

Depliegue de imagenes y sonido con hilos (Practica No. 13)

Sintaxis del programa:

from Tkinter import *  # crea la GUI
from PIL import Image, ImageTk
import pygame  # ayuda a reproducir audios mp3

import os  # permite manipular archivos
import random
import time
import threading

dir = os.path.dirname(__file__)  # lo utiliza para agregar una ruta
fotos = dir + "/imagenes/"  # guarda la direccion de la carpeta mas la carpeta donde esten
sonidos = dir + "/imagenes/"  # lo mismo en esta con los audios

play= 0
foto = object
sonido = object


def Mostrar_imagenes():
    global play,fotos,foto,etiqueta,nombre
    play=1
    while play==1:
        array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]  # crea un arreglo con el nombre de las imagenes
        animales = ["Squirel", "Kitty", "Raccoon", "Panda", "Cat", "Slot", "Husky", "Labrador", "Dolphin", "Pug", "Poodle"]

        imagen_seleccionada = random.choice(array)
        selectimagen = str(array.index(imagen_seleccionada) + 1)  # elige una imagen aleatoria
        selectnombre = animales[imagen_seleccionada - 1]
        figura = fotos + selectimagen + ".png"  # guardar la foto seleccionada

        "Como despliego la imagen en la ventana Tk"
        img = Image.open(figura)  # abre la imagen seleccionada
        img.thumbnail((300, 300), Image.ANTIALIAS)  # le da un tamano igual a todas las imagenes
        foto = ImageTk.PhotoImage(img)  # convierte la imagen a un archivo que tkinter pueda mostrar
        etiqueta= Label(root,image=foto).place(x=120, y=130)
        nombre = Label(root,text=selectnombre, font=("Harlow Solid Italic", 30), fg="purple").place(x=180, y=60)
        # para reproducir sonido
        sonido = sonidos + selectimagen + ".mp3"  # guarda el audio con el numero de foto que se selecciono
        print sonido
        pygame.mixer.init()  # inicia el reproductor
        pygame.mixer.music.load(sonido)  # carga el archivo de audio
        pygame.mixer.music.play()  # comienza a reproducir el audio
        time.sleep(3)

def detener():
    global play
    play=0

def Iniciar():
    hilo1=threading.Thread(target=Mostrar_imagenes)
    hilo1.start()


root = Tk()
root.geometry("500x500")
Titulo= Label(root,text="Imagenes mostradas al azar",font=("PhrasticMedium", 20)).place(x=100, y=10)

iniciar=StringVar()
iniciar.set("Iniciar")
Boton_Iniciar= Button(root,textvariable=iniciar,font=("Martina", 14),fg="green",command=Iniciar).place(x=90,y=450)
Detener=StringVar()
Detener.set("Detener")
Boton_parar=Button(root,textvariable=Detener,font=("Martina", 14),fg="red",command=detener).place(x=410,y=450)
pygame.init()
root.mainloop()


Corrida en pantalla de la interfaz




martes, 16 de octubre de 2018

Programa de ventas. Dinero total (Practica No. 3)

Sintaxis del programa


from Tkinter import *
import tkMessageBox


def SumMul():
    try:
        _e0 = int(v0.get())
        _e0 = _e0 * .50
        _e1 = int(v1.get())
        _e1 = _e1 * 1
        _e2 = int(v2.get())
        _e2 = _e2 * 2
        _e3 = int(v3.get())
        _e3 = _e3 * 5
        _e4 = int(v4.get())
        _e4 = _e4 * 10
        _e5 = int(v5.get())
        _e5 = _e5 * 20
        _e6 = int(v6.get())
        _e6 = _e6 * 50
        _e7 = int(v7.get())
        _e7 = _e7 * 100
        _e8 = int(v8.get())
        _e8 = _e8 * 200
        _e9 = int(v9.get())
        _e9 = _e9 * 500
        _e10 = _e0 + _e1 + _e2 + _e3 + _e4 + _e5 + _e6 + _e7 + _e8 + _e9
        tkMessageBox.showinfo("El resultado es", _e10)
    except ValueError:
        etiqueta.config(text="Introduce un numero entero")


v = Tk()
v.title("")
v.geometry("200x350")

vp = Frame(v)
vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10))
vp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

ET0 = Label(vp, text="MONEDAS")
ET0.grid(column=2, row=1)

e0 = Label(vp, text="0.50")
e0.grid(column=1, row=3)

e1 = Label(vp, text="1.00")
e1.grid(column=1, row=4)

e2 = Label(vp, text="2.00")
e2.grid(column=1, row=5)

e3 = Label(vp, text="5.00")
e3.grid(column=1, row=6)

e3 = Label(vp, text="10.00")
e3.grid(column=1, row=7)

v0 = ""
v0 = Entry(vp, width=5, textvariable=v0)
v0.grid(row=3, column=2)

v1 = ""
v1 = Entry(vp, width=5, textvariable=v1)
v1.grid(row=4, column=2)

v2 = ""
v2 = Entry(vp, width=5, textvariable=v2)
v2.grid(row=5, column=2)

v3 = ""
v3 = Entry(vp, width=5, textvariable=v3)
v3.grid(row=6, column=2)

v4 = ""
v4 = Entry(vp, width=5, textvariable=v4)
v4.grid(row=7, column=2)

ET1 = Label(vp, text="BILLETES")
ET1.grid(column=2, row=9)

e4 = Label(vp, text="20.00")
e4.grid(column=1, row=11)

e5 = Label(vp, text="50.00")
e5.grid(column=1, row=12)

e6 = Label(vp, text="100.00")
e6.grid(column=1, row=13)

e7 = Label(vp, text="200.00")
e7.grid(column=1, row=14)

e8 = Label(vp, text="500.00")
e8.grid(column=1, row=15)

v5 = ""
v5 = Entry(vp, width=5, textvariable=v5)
v5.grid(row=11, column=2)

v6 = ""
v6 = Entry(vp, width=5, textvariable=v6)
v6.grid(row=12, column=2)

v7 = ""
v7 = Entry(vp, width=5, textvariable=v7)
v7.grid(row=13, column=2)

v8 = ""
v8 = Entry(vp, width=5, textvariable=v8)
v8.grid(row=14, column=2)

v9 = ""
v9 = Entry(vp, width=5, textvariable=v9)
v9.grid(row=15, column=2)

b = Button(vp, text="TOTAL", command=SumMul)
b.grid(row=17, column=2, padx=(20, 20), pady=(20, 20))

v.mainloop()



Ejecucion del programa






martes, 9 de octubre de 2018

Menu de poligonos

Sintaxis del programa:

from Tkinter import *
def Seleccion(opc,nombre):
    vs=Toplevel()
    vs.configure(bg="gray")
    vs.title(nombre)
    if opc==1:
        panel = Canvas(vs ,width=1200, height=650, bg="gray")
        panel.pack()
        # cara
        panel.create_polygon(415, 50, 235, 490, 365, 625, 755, 625, 850, 500, 700, 50,
                             width=1, fill="#e0af77", outline="brown")
        # orejas
        panel.create_polygon(415, 50, 60, 320, 175, 635, width=1, fill="#bb6400", outline="#000000")
        panel.create_polygon(700, 50, 1045, 320, 896, 635, width=1, fill="#bb6400", outline="#000000")
        # menton
        panel.create_polygon(365, 625, 550, 415, 755, 625, width=1, fill="#bb6400", outline="#000000")
        # ojos
        panel.create_oval(420, 225, 480, 305, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(630, 225, 690, 305, width=1, fill="#1a1200", outline="#000000")
        # bigotes
        panel.create_oval(475, 525, 490, 540, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(615, 525, 630, 540, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(445, 560, 460, 575, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(610, 560, 625, 575, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(480, 560, 495, 575, width=1, fill="#1a1200", outline="#000000")
        panel.create_oval(640, 560, 655, 575, width=1, fill="#1a1200", outline="#000000")
        # nariz
        panel.create_oval(470, 305, 640, 500, width=1, fill="#1a1200", outline="#000000")
    elif opc == 2:
        panel = Canvas(vs,width=225, height=200, bg="white")
        panel.pack()
        # Parte negra
        panel.create_polygon(70, 10, 170, 10, 170, 20, 190, 20, 190, 30, 200, 30, 200, 80, 190, 80, 190, 90, 170, 90,
                             170, 100, 140, 100, 140, 120, 150, 120, 150, 110, 170, 110, 170, 100, 190, 100, 190, 110,
                             200, 110, 200, 140, 190, 140, 190, 150, 180, 150, 180, 160, 160, 160, 160, 170, 80, 170,
                             80, 160, 60, 160, 60, 150, 50, 150, 50, 140, 40, 140, 40, 110, 50, 110, 50, 100, 70, 100,
                             70, 110, 90, 110, 90, 120, 100, 120, 100, 100, 70, 100, 70, 90, 50, 90, 50, 80, 40, 80, 40,
                             30, 50, 30, 50, 20, 70, 20, 70, 10, width=1, fill="black", outline="black")

        # Parte naranja
        panel.create_polygon(80, 20, 160, 20, 160, 30, 180, 30, 180, 40, 190, 40, 190, 70, 180, 70, 180, 80, 160, 80,
                             160, 90, 80, 90, 80, 80, 60, 80, 60, 70, 50, 70, 50, 40, 60, 40, 60, 30, 80, 30, 80, 20,
                             width=1, fill="orange", outline="orange")

        # Parte amarilla
        panel.create_polygon(90, 30, 150, 30, 150, 40, 170, 40, 170, 70, 150, 70, 150, 80, 90, 80, 90, 70, 70, 70, 70,
                             40, 90, 40, 90, 30, width=1, fill="yellow", outline="yellow")

        # Parte blanca
        panel.create_polygon(90, 50, 150, 50, 150, 60, 90, 60, 90, 50, width=1, fill="white", outline="white")

        # Ojos rectangulos negros
        panel.create_rectangle(100, 40, 110, 70, width=1, fill="black", outline="black")
        panel.create_rectangle(130, 40, 140, 70, width=1, fill="black", outline="black")

        # Parte verde
        panel.create_polygon(110, 100, 130, 100, 130, 150, 140, 150, 140, 130, 150, 130, 150, 120, 170, 120, 170, 110,
                             190, 110, 190, 140, 180, 140, 180, 150, 160, 150, 160, 160, 80, 160, 80, 150, 60, 150, 60,
                             140, 50, 140, 50, 110, 70, 110, 70, 120, 90, 120, 90, 130, 100, 130, 100, 150, 110, 150,
                             110, 100, width=1, fill="green", outline="green")
    elif opc == 3:
        panel = Canvas(vs,width=200, height=200, bg="gray")
        panel.pack()

        # Primera parte negra
        panel.create_polygon(70, 50, 70, 60, 50, 60, 50, 70, 40, 70, 40, 150, 50, 150, 50, 160, 60, 160, 60, 170, 80,
                             170, 80, 180,
                             110, 180, 110, 170, 130, 170, 130, 160, 140, 160, 140, 150, 150, 150, 150, 70,
                             140, 70, 140, 60, 120, 60, 120, 50, 70, 50, width=1, fill="black")

        # ojo 1
        panel.create_polygon(50, 80, 50, 120, 60, 120, 60, 130, 80, 130, 80, 120, 90, 120, 90, 110, 80, 110, 80, 100,
                             70, 100, 70, 90
                             , 60, 90, 60, 80, 50, 80, width=1, fill="white")

        # ojo 2
        panel.create_polygon(140, 80, 130, 80, 130, 90, 120, 90, 120, 100, 110, 100, 110, 110, 100, 110, 100, 120, 110,
                             130, 130, 130, 130, 120
                             , 140, 120, 140, 80, 130, 80, width=1, fill="white")



    elif opc == 4:
        panel = Canvas(vs, width=300, height=200, bg="black")
        panel.pack()

        # Cuerpo del fantasma
        panel.create_polygon(100, 10, 130, 10, 130, 20, 150, 20, 150, 20, 150, 30, 160, 30, 160, 40, 170, 40, 170, 60,
                             180, 60, 180, 160, 170, 160,
                             170, 150, 160, 150, 160, 140, 150, 140, 150, 150, 140, 150, 140, 160, 130, 160, 130, 140,
                             100, 140, 100, 160,
                             90, 160, 90, 150, 80, 150, 80, 140, 70, 140, 70, 150, 60, 150, 60, 160, 50, 160, 50, 60,
                             60, 60,
                             60, 40, 70, 40, 70, 30, 80, 30, 80, 20, 100, 20, width=1, fill="blue", outline="white")

        # Ojos Fantasma
        panel.create_polygon(80, 50, 100, 50, 100, 70, 80, 70, width=1, fill="white")
        panel.create_polygon(130, 50, 150, 50, 150, 70, 130, 70, width=1, fill="white")

        # Boca Fantasma
        panel.create_polygon(65, 110, 70, 110, 70, 120, 65, 120, width=1, fill="white")
        panel.create_polygon(70, 100, 90, 100, 90, 110, 70, 110, width=1, fill="white")
        panel.create_polygon(90, 110, 110, 110, 110, 120, 90, 120, width=1, fill="white")
        panel.create_polygon(110, 100, 130, 100, 130, 110, 110, 110, width=1, fill="white")
        panel.create_polygon(130, 110, 150, 110, 150, 120, 130, 120, width=1, fill="white")
        panel.create_polygon(150, 100, 170, 100, 170, 110, 150, 110, width=1, fill="white")
        panel.create_polygon(170, 110, 175, 110, 175, 120, 170, 120, width=1, fill="white")

    elif opc == 5:
        dib = Canvas(vs, width=800, height=800, bg="cyan")
        dib.pack(expand=YES, fill=BOTH)
        # gorra
        dib.create_polygon(250, 0, 250, 50, 200, 50, 200, 100, 650, 100, 650, 50, 500, 50, 500, 0, width=1, fill="red",
                           outline="black")
        # cabelloenJota
        dib.create_polygon(200, 100, 200, 150, 250, 150, 250, 250, 350, 250, 350, 200, 300, 200, 300, 150, 350, 150,
                           350, 100, width=1, fill="brown", outline="black")
        # oreja
        dib.create_polygon(200, 150, 200, 250, 250, 250, 250, 150, width=1, fill="yellow", outline="black")
        # cabellodetrasoreja
        dib.create_polygon(200, 150, 150, 150, 150, 250, 200, 250, 200, 150, width=1, fill="brown", outline="black")
        # cabellobajooreja
        dib.create_polygon(200, 250, 200, 300, 250, 300, 250, 250, width=1, fill="brown", outline="black")
        # cara
        dib.create_polygon(350, 100, 350, 150, 300, 150, 300, 200, 350, 200, 350, 250, 250, 250, 250, 350, 550, 350,
                           550, 250, 700, 250, 700, 200, 650, 200, 650, 150, 550, 150, 550, 100, 350, 100, width=1,
                           fill="yellow", outline="black")
        # ojo
        dib.create_polygon(450, 100, 450, 200, 500, 200, 500, 100)
        # Mostacho
        dib.create_polygon(500, 200, 500, 250, 450, 250, 450, 300, 650, 300, 650, 250, 550, 250, 550, 200)
        # Mangaizquierda
        dib.create_polygon(300, 350, 200, 350, 200, 400, 150, 400, 150, 450, 100, 450, 100, 500, 200, 500, 200, 550,
                           250, 550, 250, 500, 300, 500, 300, 350, width=1, fill="red", outline="black")
        # centro
        dib.create_polygon(350, 350, 350, 450, 450, 450, 450, 350, width=1, fill="red", outline="black")
        # Mangaderecha
        dib.create_polygon(500, 350, 500, 500, 550, 500, 550, 550, 600, 550, 600, 500, 700, 500, 700, 450, 650, 450,
                           650, 400, 600, 400, 600, 350, width=1, fill="red", outline="black")
        # Manoizquierda
        dib.create_polygon(100, 500, 100, 650, 200, 650, 200, 600, 250, 600, 250, 550, 200, 550, 200, 500, width=1,
                           fill="yellow", outline="black")
        # Manoderecha
        dib.create_polygon(600, 500, 600, 550, 550, 550, 550, 600, 600, 600, 600, 650, 700, 650, 700, 500, width=1,
                           fill="yellow", outline="black")
        # ropita
        dib.create_polygon(300, 350, 300, 500, 250, 500, 250, 600, 200, 600, 200, 700, 350, 700, 350, 650, 450, 650,
                           450, 700, 600, 700, 600, 600, 550, 600, 550, 500, 500, 500, 500, 350, 450, 350, 450, 450,
                           350, 450, 350, 350, width=1, fill="blue", outline="black")
        # botonizquierdo
        dib.create_polygon(300, 500, 300, 550, 350, 550, 350, 500, width=1, fill="yellow", outline="black")
        # botonderecho
        dib.create_polygon(450, 500, 450, 550, 500, 550, 500, 500, width=1, fill="yellow", outline="black")
        # botaizquierda
        dib.create_polygon(150, 700, 150, 750, 100, 750, 100, 800, 300, 800, 300, 700, width=1, fill="brown",
                           outline="black")
        # botaderecha
        dib.create_polygon(500, 700, 500, 800, 700, 800, 700, 750, 650, 750, 650, 700, width=1, fill="brown",
                           outline="black")

    elif opc == 6:
        Escudo = Canvas(vs, width=420, height=420, bg='blue')
        # Primer Arco Rojo
        Escudo.create_oval(40, 40, 400, 400, width=7, fill='red')
        # Arco Gris
        Escudo.create_oval(90, 90, 350, 350, width=7, fill='grey')
        # Segundo Arco Rojo
        Escudo.create_oval(140, 140, 302, 302, width=7, fill='red')
        # Arco Azul
        Escudo.create_oval(163, 163, 278, 278, width=7, fill='blue')
        # Estrella Blanca
        Escudo.create_polygon(222, 170,
                              250, 268,
                              170, 200,
                              270, 200,
                              185, 268, width=5, fill="white", outline="white")

        Escudo.pack()  # para que pueda aparecer el Escudo


def menu():
    vp = Tk()
    vp.geometry("400x400+50+50")
    vp.configure(bg="white")
    vp.title("Menu de dibujos")
    bt1 = Button(vp, text="Perrito de Ambrocio Laureano", bg="red", fg="White",
                 command=lambda: Seleccion(1, "Dibujo por ambrocio isaias"))
    bt1.pack(padx=5, pady=5, fill=X)
    bt2 = Button(vp, text="Flor de Lyvan Alejandro", bg="red", fg="White",
                 command=lambda: Seleccion(2, "Dibujo por lyvan alejandro"))
    bt2.pack(padx=5, pady=5, fill=X)
    bt3= Button(vp, text="Venom de Livan Sanchez", bg="red", fg="White",
                 command=lambda: Seleccion(3, "Dibujo por livan sanchez"))
    bt3.pack(padx=5, pady=5, fill=X)
    bt4 = Button(vp, text="Fantasma por Fernando Veliz", bg="red", fg="White",
                 command=lambda: Seleccion(4, "Dibujo por Fernando Veliz"))
    bt4.pack(padx=5, pady=5, fill=X)
    bt5 = Button(vp, text="Mario bros por Alejandro Echevarria", bg="red", fg="White",
                 command=lambda: Seleccion(5, "Dibujo por Alejandro Echevarria"))
    bt5.pack(padx=5, pady=5, fill=X)
    bt6 = Button(vp, text="Escudo por Jesus Uribe", bg="red", fg="White",
                 command=lambda: Seleccion(6, "Dibujo por Jesus Uribe"))
    bt6.pack(padx=5, pady=5, fill=X)


    vp.mainloop()


menu()

Visualizacion de los poligonos:







jueves, 20 de septiembre de 2018

Seta de Mario Bros. en python

Programa ya corregido

Tomen en cuenta las coordenadas de x,y de la siguiente forma(cuarto cuadrante del plano cartesiano):


  • x:en la parte superior de una hoja cuadriculada
  • y:parte inferior izquierda de la misma hoja

Codigo fuente:


from tkinter import *

def dibujo(ventana2):
    panel= Canvas(width=200, height=200, bg="yellow")
    panel.pack()
    #Parte negra
    panel.create_polygon(70,10,130,10,130,20,150,20,150,30,160,30,160,50,170,50,170,60,180,60,180,130,
    170,130,170,140,160,140,160,160,150,160,150,170,50,170,50,160,40,160,40,140,30,140,30,130,20,130,
    20,60,30,60,30,50,40,50,40,30,50,30,50,20,70,20,70,10,width=1,fill="black",outline="black")

    #Primera parte blanca
    panel.create_polygon(80,20,120,20,120,30,140,30,140,40,150,40,150,60,160,60,160,70,170,70,
    170,120,150,120,150,110,50,110,50,120,30,120,30,70,40,70,40,60,50,60,50,40,60,40,60,30,80,30,80,20,width=1,fill="white",outline="white")

    #segunda parte blanca
    panel.create_polygon(60,120,140,120,140,130,150,130,150,150,140,150,140,160,60,160,60,150,
    50,150,50,130,60,130,60,120,width=1,fill="white",outline="white")

    #ojos
    panel.create_rectangle(80,120,90,140, width=1,fill="black",outline="black")
    panel.create_rectangle(110,120,120,140,width=1,fill="black",outline="black")

    #manchas
    panel.create_polygon(80,70,120,70,120,80,130,80,130,100,120,100,120,110,80,110,80,100,70,100,
    70,80,80,80,80,70,width=1,fill="red",outline="red")
    panel.create_polygon(110,20,120,20,120,30,140,30,140,50,120,50,120,40,110,40,110,20,width=1,fill="red",outline="red")
    panel.create_polygon(80,20,90,20,90,40,80,40,80,50,60,50,60,30,80,30,80,20,width=1,fill="red",outline="red")
    panel.create_polygon(40,60,60,60,60,90,50,90,50,100,30,100,30,70,40,70,40,60,width=1,fill="red",outline="red")
    panel.create_polygon(140,60,160,60,160,70,170,70,170,100,150,100,150,90,140,90,140,60,width=1,fill="red",outline="red")


ventana2 =Tk()
ventana2.title("Dibujo en ventana")
ventana2.config(bg="white")
ventana2.geometry("300x300")
boton = Button(ventana2, text="Presione para crecer c:", command=lambda: dibujo(ventana2) )
boton.pack()
ventana2.mainloop()





Como mencione al inicio, es mas sencillo apoyarse de una hoja cuadriculada para realizar el boceto de nuestra imagen antes de codificar las coordenadas para evitar errores como este.
Tambien anexo la hoja que utilice para practicar, de la cual se muestra el error de coordenadas:



martes, 18 de septiembre de 2018

Practica con Tkinter simulando un paint (Practica No. 14)


En esta entrada, veremos un programa que simula la forma de trabajo de un paint hecho con la libreria Tkinter.

Sintaxis

from Tkinter import *

canvas_width =500
canvas_height =150
def paint(event):
    x1,y1= (event.x -1), (event.y -1)
    x2,y2= (event.x +1), (event.y +1)#permite que los eventos del mouse se realizen
    panel.create_line(x1,y1,x2,y2, fill="red")

def clearall():
    panel.delete("all")


master=Tk()
master.title("pinta con el mouse")#titulo de la ventana
panel=Canvas(master, width=canvas_width, height=canvas_height) #panel para dibujar tipo canvas
panel.pack(expand = YES, fill= BOTH) #permite expandir a canvas y rellenar
panel.bind("", paint) #con esto permite pintar

mensaje= Label(master, text="Presione o arrastre con el mouse :) ")
mensaje.pack(side=BOTTOM)

boton=Button(master,text="Limpiar",command= clearall)
boton.pack(side=BOTTOM)

master.mainloop()





Ejemplo de corrida en pantalla con Pycharm





 Corrida en pantalla sin dibujar aun



Al tener la función create_oval, al momento de dibujar nos deja rastros de un color negro en pequeños circulos casi imperceptibles

jueves, 13 de septiembre de 2018

Creacion de un arco con Tkinter (Practica No. 13)


Codigo fuente del programa


from Tkinter import *

ventana=Tk() #creacion de la ventana
ventana.title('Muestra un arco')
ventana.config(bg='brown')
ventana.geometry('500x500')

def arco(ventana):
    panel = Canvas(width = 400, height = 400, bg='red')
    panel.pack() #inicia el panel
    panel.create_arc(0, 300, 200, 0, width = 5, fill= 'yellow') #coordenadas y caracteristica de la figura


boton = Button(ventana, text = 'Haga arco', command = lambda:arco(ventana))
boton.pack()

ventana.mainloop()

       



Capturas de pantalla dentro de Pycharm





Resultado de la corrida en pantalla


Ventana con imagen creada (Practica No. 12)

from Tkinter import *

ventana=Tk()
ventana.geometry("500x500")
ventana.title("Uso de imagen")

imagen=PhotoImage(file="gif_terminado.gif")
#imgbtn=PhotoImage(file="")

fondo = Label(ventana,image=imagen).place(x=0,y=0)
#boton = Button(ventana,image=imgbtn).place(x=20,y=20)
ventana.mainloop()






RESULTADO


Video de referencia: https://www.youtube.com/watch?v=DI9xgowNs-g

Creacion de una estrella con modulo Tkinter (Practica No. 10)


En esta entrada se mostrar la creacion de un poligono dando como referencia puntos dentro de un lienzo para crear dicha figura.
Como se vio en la entrada pasada, el modulo de Tkinter nos permite usar un lienzo para dibujar dentro de este con coordenadas(serie de puntos) formando asi una figura.

En esta ocasion, se realizo una estrella con el siguiente codigo como se muestra:

from Tkinter import *

ventanaP = Tk() #crea una objeto tipo ventana
ventanaP.title("Hare un poligono")
ventanaP.config(bg="brown") #Dar color al fondo de la ventana
ventanaP.geometry('500x500') #Dar ancho y alto de la ventana en pixeles

def poligono(ventanaP):
    panel = Canvas(width= 400, height = 400, bg = 'red') #seria el lienzo canvas deon va fig
    panel.create_polygon(200, 10, 380, 280, 10, 100, 360, 100, 10, 280, width=5, fill='', outline='green') #Coordenadas para la creacion del poligono
    panel.pack()

#def ejecutar(f):
#ventanaP.after(200, f)#forma de ejecutar las funciones

boton = Button(ventanaP, text="Mostrar linea" , command= lambda: poligono(ventanaP))
boton.pack()
ventanaP.mainloop()



Resultado de la corrida del programa



miércoles, 12 de septiembre de 2018

Ventana con boton que despliega una figura en un lienzo (Practica No. 9)

En esta ocasion vamos a ver un programa que, al igual que los anteriores con la libreria Tkinter nos permitira visualizar una ventana con diferentes caracteristicas y un boton que despliegue una figura.

CODIGO

from Tkinter import *

def lineas(ventanaP):
    lineas= Canvas(width=210, height=210,bg="black") #lienzo donde va la figura
    lineas.pack() #carga la linea
    lineas.create_line(0,200,200,0, width=10, fill="white") #cordenadas de la linea a crear

def ejecutar(f):
    ventanaP.after(200,f)  #ejecuta las funciones

ventanaP=Tk()
ventanaP.title("Ventana de figura con un boton")
ventanaP.config(bg="purple")  #color de fondo de la ventana
ventanaP.geometry("500x500")  #tamano de la ventana a crear

boton=Button(ventanaP, text="Mostrar linea",command=lambda : ejecutar(lineas(ventanaP))) #comando lambda para llamar a las funciones
boton.pack()
ventanaP.mainloop()


      






Tenemos definidos dos procesos con la instruccion "def" que son lineas(que recibe como parametro la ventana que vamos a crear) y ejecutar(sera el encargado de iniciar todo el programa).

Como podemos observar, dentro de ventana se ven nuevas funciones que permiten la configuracion de su "background" con un color solido, al igual que las dimensiones que tendra nuestra ventana.

Dentro de la intruccion lineas tenemos varias funciones que nos permiten realizar diversas cosas; primeramente con Canvas nos permite crear un lienzo con las especificaciones necesarias para el trazado de la linea que queremos (ancho,alto y el color que tendra nuestro lienzo), de igual forma la funcion "create_line" nos da la opcion de especificar como queremos la linea a dibujar.

Resultado




Una pequeña configuracion.
Como vemos en la siguiente imagen, la funcion ejecutar esta en comentario y ahora en lugar de dibujar una linea sera un cuadrado(debido a las medidas que se le dieron).
Lo que permite optimizar un poco el codigo que antes se tenia con un solo procedimiento pero para una figura diferente (dependiendo de la funcion "create" que se utilice).





Modificando las medidas y la funcion tenemos otros dos ejemplos con la misma funcion "create_rectangle" y "create_oval"

Rectangulo
from Tkinter import *

def Rectangulo(ventanaP):
    Rectangulo= Canvas(width=210, height=210,bg="black") #lienzo donde va la figura
    Rectangulo.pack() #carga la linea
    Rectangulo.create_rectangle(10,10,200,100, width=10, fill="white") #cordenadas de la linea a crear

#def ejecutar(f):
    #ventanaP.after(200,f)  #ejecuta las funciones

ventanaP=Tk()
ventanaP.title("Ventana de figura con un boton")
ventanaP.config(bg="purple")  #color de fondo de la ventana
ventanaP.geometry("500x500")  #tamano de la ventana a crear

boton=Button(ventanaP, text="Mostrar linea",command=lambda : Rectangulo(ventanaP)) #comando lambda para llamar a las funciones
boton.pack()
ventanaP.mainloop()








Circulo
from Tkinter import *

def circulo(ventanaP):
    circulo= Canvas(width=210, height=210,bg="black") #lienzo donde va la figura
    circulo.pack() #carga la linea
    circulo.create_oval(10,10,200,200, width=10, fill="white") #cordenadas de la linea a crear

#def ejecutar(f):
    #ventanaP.after(200,f)  #ejecuta las funciones

ventanaP=Tk()
ventanaP.title("Ventana de figura con un boton")
ventanaP.config(bg="purple")  #color de fondo de la ventana
ventanaP.geometry("500x500")  #tamano de la ventana a crear

boton=Button(ventanaP, text="Mostrar linea",command=lambda : circulo(ventanaP)) #comando lambda para llamar a las funciones
boton.pack()
ventanaP.mainloop()

       






lunes, 10 de septiembre de 2018

Uso de pycharm con modulo Tkinter(Practica No. 7)

En esta ocasion vamos a realizar una pequeña practica con los conocimientos adquiridos de los modulos turtle y tkinter en un editor de texto,en este caso sera Pycharm

Una vez dentro vamos a crear un nuevo proyecto con el nombre que gusten.
Al tener la carpeta de nuestro proyecto, damos clic derecho y creamos un archivo en python.




Una vez aqui, vamos a importar nuestra libreria Tkinter como antes habiamos visto y comenzaremos a codificar.
En este caso, se hara una pequeña ventana que contenga un boton que al momento de presionarlo imprime un mensaje en nuestra consola del editor de texto.

Sintaxis


from Tkinter import *

def funcion():
  print "excelente"

ventana=Tk()
boton=Button(ventana,text="Como estas?",command=funcion)
boton.pack()
ventana.mainloop()




Creamos una pequeña funcion para que al momento de presionar nuestro boton, nos imprima cada vez el mensaje que se tiene en la funcion declarada antes de nuestra ventana

Resultado



Ejemplo 2 :Ventana en tkinter con boton de minimizar

       
from Tkinter import *

ventana=Tk()
boton=Button(ventana,text="Minimizar",command=ventana.iconify)
boton.pack()
ventana.mainloop()

       



Resultado