Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Como ingresar fechas en formato de fecha en Tk
#1
Hola quisiera saber si hay alguna manera de que el usuario pueda ingresar fechas si se puede con los modulo date datetime para que se mas facil el ingresar los datos y si en el campo vencimiento_de_la_cuota si hay otra manera de hacerlo ahi es donde se ingresa si pago el mes o sea la posibilidad de otro widget no se me ocurre como mejorarlo para el usuario final lo demas se me aclararon muchas cosas de lo que empece haciendo ahi va el codigo.

Código:
import tkinter as tk

from tkinter import ttk,messagebox

import sqlite3

import datetime

#from win10toast import ToastNotifier



# toaster = ToastNotifier()

# toaster.show_toast("App Gimnasio",

#                  "¡Hay que pagar la cuota!",

#                  duration=60)



db = sqlite3.connect("Gimnasio_MDD.db")

cursor = db.cursor()

#cursor.execute("create table Clientes (Id integer  primary key autoincrement,nombre text, fecha_de_nacimiento text,telefono numeric,vencimiento_de_la_cuota numeric)")




def agregar_clientes():

    Id = 0

    nombre = caja_nombre.get()

    fecha_de_nacimiento= caja_fecha.get()

    telefono = caja_telefono.get()

    Vencimiento_de_la_cuota = caja_vencimiento.get()
 

    if nombre == "" and fecha_de_nacimiento == "" and telefono == "" and Vencimiento_de_la_cuota == "" :
     

        messagebox.showerror(message = "Complete todos lo campos!")

        #db.close   

    else:
     

        clientes_tab.insert("", tk.END, text=nombre, values=(fecha_de_nacimiento, telefono ,Vencimiento_de_la_cuota))

        try:

            cursor.execute("insert into Clientes values(NULL,?,?,?,?) ",(nombre,fecha_de_nacimiento ,telefono,Vencimiento_de_la_cuota))
            db.commit()
         

            caja_nombre.delete(0,tk.END)

            caja_fecha.delete(0,tk.END)

            caja_telefono.delete(0,tk.END)

            caja_vencimiento.delete(0,tk.END)
     


        except ValueError:

            messagebox.showerror(message ="solo numeros!")

 
         

def eliminar():

    clientes = cursor.fetchall()

    for cliente in clientes:
         

        cliente = cliente[1]
     

        if selecion == " ":

            print("no se eligio")

        elif selecion == cliente:

            cursor.execute("delete from Clientes where nombre = ?",(selecion,))
 


def listar():
    for i in clientes_tab.get_children():
        clientes_tab.delete(i)

    cursor.execute("select * from Clientes")

    clientes = cursor.fetchall()


    for cliente  in clientes:

     
        clientes_tab.insert(
            "",

            tk.END,

            text=cliente[1],

            values = (cliente[2],cliente[3],cliente[4]))
    db.commit()
   

 
 

def editar_clientes():

    nueva_ventana = tk.Toplevel(ventana)

    nueva_ventana.config(width=600,height=400)

    nueva_ventana.title("Editar")

    Id = -1

    lbl_edit_nombre = ttk.Label(nueva_ventana,text="Ingrese nombre")

    lbl_edit_nombre.place(x=10,y=10)

    caja_edit_nombre = ttk.Entry(nueva_ventana)

    caja_edit_nombre.place(x=120,y=10)


    lbl_edit_cumple = ttk.Label(nueva_ventana,text="Ingrese Fecha")

    lbl_edit_cumple.place(x=10,y=40)

    caja_edit_cumple = ttk.Entry(nueva_ventana)

    caja_edit_cumple.place(x=120,y=40)


    lbl_edit_telef = ttk.Label(nueva_ventana,text="Ingrese Telefono")

    lbl_edit_telef.place(x=10,y=70)

    caja_edit_telef = ttk.Entry(nueva_ventana)

    caja_edit_telef.place(x=120,y=70)


    lbl_edit_vencimiento = ttk.Label(nueva_ventana,text="Ingrese Vencimiento")

    lbl_edit_vencimiento.place(x=10,y=90)

    caja_edit_vencimiento = ttk.Entry(nueva_ventana)

    caja_edit_vencimiento.place(x=120,y=90)
     
     

    nombres =  clientes_tab.item(clientes_tab.selection())["text"]

    valores = clientes_tab.item(clientes_tab.selection())["values"]



    boton_actualizar = ttk.Button(nueva_ventana, text = 'Actualizar', command = lambda : editar(nombres,caja_edit_nombre.get(),caja_edit_cumple.get(),caja_edit_telef.get(),caja_edit_vencimiento.get(),nombres))

    boton_actualizar.place(x=10,y=110)
   
   
   

def editar(nombres,cajaNombre,cajaCumple,cajaTelef,cajaVenci,nombre):

    nombres =  clientes_tab.item(clientes_tab.selection())["text"]

    valores = clientes_tab.item(clientes_tab.selection())["values"]
    cursor.execute("select * from Clientes")
    e = cursor.fetchall()
    name = e[0]
    name[1]
    name = name[1]
    cursor.execute(

    "UPDATE Clientes SET nombre=?, fecha_de_de_nacimiento=?, telefono=?, vencimiento_de_la_cuota=? WHERE nombre=?",

    (cajaNombre, cajaCumple, cajaTelef, cajaVenci,nombres)
    )
    db.commit()

    listar()
    # cursor.execute("insert into Clientes values(null,?,?,?,?)",(cajaNombre,cajaCumple,cajaTelef,cajaVenci))

    # clientes_tab.insert("",tk.END,text= cajaNombre,values=(cajaCumple,cajaTelef,cajaVenci))

    messagebox.showinfo("Actualizado","Registro Actualizado")
       
   
       
       
   
   
def imprimir():
    nombre = clientes_tab.item(clientes.tab.selection())["Text"] 
    valores = clientes_tab.item(clientes.tab.selection())["Values"] 
    print(nombre)
    print(valores[1])   
       


 



ventana = tk.Tk()

ventana.title("Gimansio MD")

ventana.config(width=1000, height=650)




boton_agregar = ttk.Button(text="Agregar Clientes", command=agregar_clientes)

boton_agregar.place(x=780, y=80)


boton_eliminar = ttk.Button(text="Elminar",command=eliminar)

boton_eliminar.place(x=780,y=110)


boton_listar = ttk.Button(text="Mostrar Clientes",command=listar)

boton_listar.place(x=780,y=140)

boton_actualizar = ttk.Button(text="Actualizar registro",command=editar_clientes)

boton_actualizar.place(x=780,y=170)



etiq_nombre= ttk.Label(text="Nombre")

etiq_nombre.place(x=10,y=10)

caja_nombre= ttk.Entry()

caja_nombre.place(x=70,y=10)


etiq_fecha_nacimiento = ttk.Label(text="Fecha de nacimiento")

etiq_fecha_nacimiento.place(x=200,y=10)

caja_fecha= ttk.Entry()

caja_fecha.place(x=320,y=10)



etiq_telefono = ttk.Label(text="Telefono")

etiq_telefono.place(x=420,y=10)

caja_telefono= ttk.Entry()

caja_telefono.place(x=470,y=10)


etiq_vencimiento = ttk.Label(text="Vencimiento de la cuota")

etiq_vencimiento.place(x=600,y=10)

caja_vencimiento= ttk.Entry()

caja_vencimiento.place(x=740,y=10)


lbl_mensaje = ttk.Label(text="mostrar")

lbl_mensaje.place(x=30,y=560)



clientes_tab = ttk.Treeview(columns=("fecha_de_nacimiento","telefono","vencimiento"))

clientes_tab.place(x=10, y=60, width=700, height=500)



clientes_tab.heading("#0", text="Nombre")

clientes_tab.heading("fecha_de_nacimiento", text="Fecha de Nacimiento")

clientes_tab.heading("telefono", text="Telefono")

clientes_tab.heading("vencimiento",text="Fecha de vencimiento")

clientes_tab.column("telefono", width=80)


selecion = clientes_tab.item(clientes_tab.selection())["text"]

valores = clientes_tab.item(clientes_tab.selection())["values"]






ventana.mainloop()
Responder
#2
Hola. Para permitirle al usuario ingresar la fecha, podés agregar una validación del formato en la caja de texto de Tk (por ejemplo, para que solo se acepten datos del formato dd/mm/aaaa). Acá tenés un ejemplo para validar fechas: https://recursospython.com/guias-y-manua...n-tkinter/. Una vez que tengas la fecha en una cadena, podés convertirla a un datetime.date así:

Código:
>>> import datetime
>>> cadena = "15/01/2021"
>>> fecha = datetime.datetime.strptime(cadena, "%d/%m/%Y").date()
>>> fecha
datetime.date(2021, 1, 15)

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(15-01-2022, 02:11 PM)Francisco escribió: Hola. Para permitirle al usuario ingresar la fecha, podés agregar una validación del formato en la caja de texto de Tk (por ejemplo, para que solo se acepten datos del formato dd/mm/aaaa). Acá tenés un ejemplo para validar fechas: https://recursospython.com/guias-y-manua...n-tkinter/. Una vez que tengas la fecha en una cadena, podés convertirla a un datetime.date así:

Código:
>>> import datetime
>>> cadena = "15/01/2021"
>>> fecha = datetime.datetime.strptime(cadena, "%d/%m/%Y").date()
>>> fecha
datetime.date(2021, 1, 15)

Saludos
Muchisimas gracias como siempre Feancisco sos un capoooo
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)