Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Akendore en 6 Septiembre 2015, 21:54 PM

Título: Problema programa Python
Publicado por: Akendore en 6 Septiembre 2015, 21:54 PM

[NOTA DEL MODERADOR]
No uses la etiqueta de citas, debes usar las etiquetas GeShi para insertar código. y postear en la sección adecuada cómo ya te han comentado.





¡Buenas!

Estoy intentando hacer una cuenta atrás con interfaz gráfica. El problema que tengo es que no se como
dentro de una función actualizar una label. Acabo de empezar en esto de la programación, llevo un mes.

Este es mi código:

Código (python) [Seleccionar]
from tkinter import *
from time import *
from tkinter.messagebox import *

def mostrar(v): v.deiconify()
def ocultar(v): v.withdraw()
def ejecutar(f): v1.after(200,f)

def cuentaatras(_h,_m,_s):
   x = True
   try:
       h = int(_h.get())
       m = int(_m.get())
       s = int(_s.get())
       while (x==True):
           _h.set(h)
           _m.set(m)
           _s.set(s)
           print(str(h)+":"+str(m)+":"+str(s))#Test
           if s==0 and m!=0:
               sleep(1)
               s=60
               m-=1
               print(str(h)+":"+str(m)+":"+str(s))#Test
           elif s==0 and m==0 and h!=0:
               sleep(1)
               s=60
               m=60
               h-=1
               print(str(h)+":"+str(m)+":"+str(s))#Test
           elif s==0 and m==0 and h==0:
               x=False
           sleep(1)
           s-=1
   except ValueError:
       v1a.withdraw()
       showerror("Rellena todos los campos","Rellena los campos con 0 para que sean invalidos")

#ventana cuenta atrás
v1 = Tk()
v1.title("Cuenta atrás")
v1.resizable(0,0)
f1=Frame(v1)
f1.grid(column=0,row=0,padx=(10,10),pady=(10,10))

#ventana cuenta atrás 2
v1a = Toplevel(v1)
v1a.title = v1.title
v1a.resizable(0,0)
v1a.withdraw()

#Elementos Cuenta atrás
   #Labels
LEnCA = Label(f1,text="Introduce el tiempo que quieras contar.").grid(column=1,row=1,columnspan=3,pady=(0,5))
Lh1 = Label(f1,text="Horas:").grid(column=1,row=2)
Lm1 = Label(f1,text="Minutos:").grid(column=2,row=2)
Ls1 = Label(f1,text="Segundos:").grid(column=3,row=2)

   #Entradas
Eh = StringVar()
Ehoras = Entry(f1,width=5,textvar=Eh).grid(column=1,row=3)
Em = StringVar()
Eminutos = Entry(f1,width=5,textvar=Em).grid(column=2,row=3)
Es = StringVar()
Esegundos = Entry(f1,width=5,textvar=Es).grid(column=3,row=3)
   #Botones
Bstart1 = Button(f1,text="Start",command=lambda:ejecutar(mostrar(v1a)or (cuentaatras(Eh,Em,Es)))).grid(column=4,row=3)
Bcerrar1= Button(f1,text="Cerrar",command=lambda:ejecutar(ocultar(v1))).grid(column=2,row=4)

#Elementos Cuenta atrás 2
   #Labels
h3 = StringVar()
Lh3 = Label(v1a,text=h3).grid(column=1,row=2)
m3 = StringVar()
Mh3 =Label(v1a,text=m3).grid(column=2,row=2)
s3 = StringVar()
Ls3 = Label(v1a,text=s3).grid(column=3,row=2)
   #Botones
Bparar = Button(v1a,text="Parar",command=()).grid(column=4,row=2)
Bcerrar1= Button(v1a,text="Cerrar",command=lambda:ejecutar(ocultar(v1a))).grid(column=2,row=3)
v1.mainloop()



Muchas gracias :)
Título: Re: Problema programa Python
Publicado por: DeMoNcRaZy en 6 Septiembre 2015, 21:57 PM
Buenas,

Puedes probar así:

Código (python) [Seleccionar]
var = StringVar()
var.set('Texto')

l = Label(v1, textvariable = var)
l.pack()



PD: El tema está en la sección equivocada, Python tiene lugar en Scripting

Saludos.
Título: Re: Problema programa Python
Publicado por: Eleкtro en 7 Septiembre 2015, 01:29 AM
Tal y cómo te ha comentado @YuseTist.

Aquí tienes una referencia de terceros donde explican todos los parámetros/opciones:
Python Tkinter Label (http://www.tutorialspoint.com/python/tk_label.htm)

...esta creo que es la referencia oficial de TKinter pero no estoy seguro:
Tkinter 8.5 reference: a GUI for Python (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/label.html)

Y por último la referencia oficial de TCL/TK:
Tcl8.5.18/Tk8.5.18 Documentation (http://tcl.tk/man/tcl8.5/TkCmd/label.htm)
(en algunos casos, al tomar la información de la referencia oficial, necesitarás realizar pequeñas adaptaciones al traducirlo a TKinter por algunos keywords de Python que utiliza TK)

Saludos
Título: Re: Problema programa Python
Publicado por: tincopasan en 7 Septiembre 2015, 05:31 AM
un ejemplo simple de lo que querés hacer, obvio que lo tenés que adaptar a tus necesidades.
Código (python) [Seleccionar]
import tkinter as tk
import time

def cuenta_atras():
    # inicio en 3 minutos
    for t in range(180, -1, -1):
        sf = "{:02d}:{:02d}".format(*divmod(t, 60))
        time_str.set(sf)
        root.update()
        # espera 1 segundo
        time.sleep(1)
root = tk.Tk()
time_str = tk.StringVar()
# esta es la parte del label
label_font = ('helvetica', 40)
tk.Label(root, textvariable=time_str, font=label_font, bg='white',
         fg='blue', relief='raised', bd=3).pack(fill='x', padx=5, pady=5)
tk.Button(root, text='Count Start', command=cuenta_atras).pack()
tk.Button(root, text='Count Stop', command=root.destroy).pack()
root.mainloop()
Título: Re: Problema programa Python
Publicado por: Akendore en 7 Septiembre 2015, 19:33 PM
Cita de: tincopasan en  7 Septiembre 2015, 05:31 AM
un ejemplo simple de lo que querés hacer, obvio que lo tenés que adaptar a tus necesidades.
Código (python) [Seleccionar]
import tkinter as tk
import time

def cuenta_atras():
    # inicio en 3 minutos
    for t in range(180, -1, -1):
        sf = "{:02d}:{:02d}".format(*divmod(t, 60))
        time_str.set(sf)
        root.update()
        # espera 1 segundo
        time.sleep(1)
root = tk.Tk()
time_str = tk.StringVar()
# esta es la parte del label
label_font = ('helvetica', 40)
tk.Label(root, textvariable=time_str, font=label_font, bg='white',
         fg='blue', relief='raised', bd=3).pack(fill='x', padx=5, pady=5)
tk.Button(root, text='Count Start', command=cuenta_atras).pack()
tk.Button(root, text='Count Stop', command=root.destroy).pack()
root.mainloop()


Me ha servido, ¡gracias!