[ Foro de Python ]

Ajustar columnas al ancho de la aplicación,

06-Dec-2021 22:50
Invitado (zamcega1804)
0 Respuestas

Saludos, he decidido hacer un formulario que muestra datos de mi base de datos en un GUI, el problema que solo se me muestra en pantalla 7 de las 12 columnas y no se como ajustar para que se visualicen las 12 o un scrollbar horizontal y vertical para ver el contenidos, adjunto codigo


0:
        objetoBuscar["FechaFinRenta"] = fin
    if len(precio) != 0:
        objetoBuscar["PrecioRentaDía"] = precio
    if len(marca) != 0:
        objetoBuscar["MarcaAuto"] = marca
    if len(modelo) != 0:
        objetoBuscar["ModeloAuto"] = modelo
    if len(color) != 0:
        objetoBuscar["MarcaAuto"] = color
    if len(placa) != 0:
        objetoBuscar["PlacaAuto"] = placa
    try:
        registros = tabla.get_children()    # Obtencion de los datos de la tabla
        for registro in registros:
            tabla.delete(registro)
        """ Lectura de los documentos """
        for documento in coleccion.find(objetoBuscar):  # Lectura de cada uno de los Documentos
            # Muestra los datos en la tabla
            tabla.insert('', 0, text=documento["_id"], values=documento["Nombre"]+" "+documento["Apellido"]+" "+documento["Dirección"]+" "+documento["Cédula"]+" "+documento["FechainicioRenta"] +
            " "+documento["FechaFinRenta"]+" "+documento["PrecioRentaDía"]+" "+documento["MarcaAuto"]+" "+documento["ModeloAuto"]+" "+documento["ColorAuto"]+" "+documento["PlacaAuto"])
            cliente.close()  # Cierre de la sesión
    except pymongo.errors.ServerSelectionTimeoutError as errorTiempo:  # Demora en tiempo de conexión
        print("Tiempo excedido "+errorTiempo)
    except pymongo.errors.ConnectionFailure as errorConexion:  # Fallo de la conexión
        print("Falló la conexión "+errorConexion)

def insertarDatos():
    """ Validación si no se ingresa datos """
    if len(nombre.get()) != 0 and len(apellido.get()) != 0 and len(direccion.get()) != 0 and len(cedula.get()) != 0 and len(inicio.get()) != 0 and len(fin.get()) != 0 and len(precio.get()) != 0 and len(marca.get()) != 0 and len(modelo.get()) != 0 and len(color.get()) != 0 and len(placa.get()) != 0:
        try:
            """ Obtención de los datos del formulario """
            documento = {"Nombre": nombre.get(), "Apellido": apellido.get(), "Dirección": direccion.get(), "Cédula": cedula.get(), "FechainicioRenta": inicio.get(), "FechaFinRenta": fin.get(), "PrecioRentaDía": precio.get(), "MarcaAuto": marca.get(), "ModeloAuto": modelo.get(), "ColorAuto": color.get(), "PlacaAuto": placa.get()}
            coleccion.insert(documento)

            """ Borrado de teclado """
            nombre.delete(0, END)
            apellido.delete(0, END)
            direccion.delete(0, END)
            cedula.delete(0, END)
            inicio.delete(0, END)
            fin.delete(0, END)
            precio.delete(0, END)
            marca.delete(0, END)
            modelo.delete(0, END)
            color.delete(0, END)
            placa.delete(0, END)
            nombre.focus()
        except pymongo.errors.ConnectionFailure as error:
            print(error)
    else:
        messagebox.showerror(message="Los campos no pueden estar vacíos")
    mostrarDatos()

def actualizarDatos():
    global ID_CLIENTE
    if len(nombre.get()) != 0 and len(apellido.get()) != 0 and len(direccion.get()) != 0 and len(cedula.get()) != 0 and len(inicio.get()) != 0 and len(fin.get()) != 0 and len(precio.get()) != 0 and len(marca.get()) != 0 and len(modelo.get()) != 0 and len(color.get()) != 0 and len(placa.get()) != 0:
        try:
            idBuscar = {"_id": ObjectId(ID_CLIENTE)}
            nuevosValores = {"Nombre": nombre.get(), "Apellido": apellido.get(), "Dirección": direccion.get(), "Cédula": cedula.get(), "FechainicioRenta": inicio.get(
            ), "FechaFinRenta": fin.get(), "PrecioRentaDía": precio.get(), "MarcaAuto": marca.get(), "ModeloAuto": modelo.get(), "ColorAuto": color.get(), "PlacaAuto": placa.get()}
            coleccion.update(idBuscar, nuevosValores)
            nombre.delete(0, END)
            apellido.delete(0, END)
            direccion.delete(0, END)
            cedula.delete(0, END)
            inicio.delete(0, END)
            fin.delete(0, END)
            precio.delete(0, END)
            marca.delete(0, END)
            modelo.delete(0, END)
            color.delete(0, END)
            placa.delete(0, END)
        except pymongo.errors.ConnectionFailure as error:
            print(error)
    else:
        messagebox.showerror("Los campos no pueden estar vacíos")
    mostrarDatos()
    crear["state"] = "normal"
    actualizar["state"] = "disabled"
    eliminar["state"] = "disabled"

def eliminarDatos():
    global ID_CLIENTE
    try:
        idBuscar = {"_id": ObjectId(ID_CLIENTE)}
        coleccion.delete_one(idBuscar)
        nombre.delete(0, END)
        apellido.delete(0, END)
        direccion.delete(0, END)
        cedula.delete(0, END)
        inicio.delete(0, END)
        fin.delete(0, END)
        precio.delete(0, END)
        marca.delete(0, END)
        modelo.delete(0, END)
        color.delete(0, END)
        placa.delete(0, END)
    except pymongo.errors.ConnectionFailure as error:
        print(error)
    crear["state"] = "normal"
    actualizar["state"] = "disabled"
    eliminar["state"] = "disabled"
    mostrarDatos()

def buscarDatos():
    mostrarDatos(nombre.get(), apellido.get(), direccion.get(), cedula.get(), inicio.get(
    ), fin.get(), precio.get(), marca.get(), modelo.get(), color.get(), placa.get())

def dobleClickTabla(event):
    global ID_CLIENTE
    ID_CLIENTE = str(tabla.item(tabla.selection())["text"])
    documento = coleccion.find({"_id": ObjectId(ID_CLIENTE)})[0]
    nombre.delete(0, END)
    nombre.insert(0, documento["Nombre"])
    apellido.delete(0, END)
    apellido.insert(0, documento["Apellido"])
    direccion.delete(0, END)
    direccion.insert(0, documento["Dirección"])
    cedula.delete(0, END)
    cedula.insert(0, documento["Cédula"])
    inicio.delete(0, END)
    inicio.insert(0, documento["FechainicioRenta"])
    fin.delete(0, END)
    fin.insert(0, documento["FechaFinRenta"])
    precio.delete(0, END)
    precio.insert(0, documento["PrecioRentaDía"])
    marca.delete(0, END)
    marca.insert(0, documento["MarcaAuto"])
    modelo.delete(0, END)
    modelo.insert(0, documento["ModeloAuto"])
    color.delete(0, END)
    color.insert(0, documento["ColorAuto"])
    placa.delete(0, END)
    placa.insert(0, documento["PlacaAuto"])
    crear["state"] = "disabled"
    actualizar["state"] = "normal"
    eliminar["state"] = "normal"

""" Desarrollo """
ventana = Tk()  # Declaración de la Ventana Principal
ventana.title("Proyecto de MongoDB: Renta de Carros")  # Título de la ventana
ventana.geometry('900x475')  # Tamaño de la Ventana
ventana.resizable(1, 1)  # Control de expansion

""" Tabla de Visualización de Datos """
# Declaración de la tabla para los datos
# Creación de las columnas de la tabla
tabla = ttk.Treeview(ventana, columns=[f"#{n}" for n in range(1, 12)])
# Declaración de la fila y ocupación de las columnas de la tabla
tabla.grid(row=1, column=0, columnspan=12)
tabla.heading("#0", text="Id_Cliente", anchor="center")  # Cabecera
tabla.heading("#1", text="Nombre", anchor="w")  # Cabecera
tabla.heading("#2", text="Apellido", anchor="w")    # Cabecera
tabla.heading("#3", text="Dirección", anchor="w")   # Cabecera
tabla.heading("#4", text="Cédula", anchor="w")  # Cabecera
tabla.heading("#5", text="FechaInicioRenta", anchor="w")    # Cabecera
tabla.heading("#6", text="FechaFinRenta", anchor="w")   # Cabecera
tabla.heading("#7", text="PrecioRentaDía", anchor="w")  # Cabecera
tabla.heading("#8", text="MarcaAuto", anchor="w")   # Cabecera
tabla.heading("#9", text="ModeloAuto", anchor="w")  # Cabecera
tabla.heading("#10", text="ColorAuto", anchor="w")  # Cabecera
tabla.heading("#11", text="PlacaAuto", anchor="w")  # Cabecera
tabla.bind("<Double-Button-1>", dobleClickTabla)    # Evento sobre la tabla

""" Ingreso de Formulario """
Label(ventana, text="Nombre", width=60, anchor="w").grid(
    row=2, column=0, sticky=W+E)

nombre = Entry(ventana, width=50)
nombre.grid(row=2, column=0)
nombre.focus()  # Muestra el cursor sobre este text

Label(ventana, text="Apellido", width=60, anchor="w").grid(
    row=3, column=0, sticky=W+E)

apellido = Entry(ventana, width=50)
apellido.grid(row=3, column=0)

Label(ventana, text="Dirección", width=60, anchor="w").grid(
    row=4, column=0, sticky=W+E)

direccion = Entry(ventana, width=50)
direccion.grid(row=4, column=0)

Label(ventana, text="Cédula", width=60, anchor="w").grid(
    row=5, column=0, sticky=W+E)

cedula = Entry(ventana, width=50)
cedula.grid(row=5, column=0)

Label(ventana, text="FechainicioRenta", width=60,
      anchor="w").grid(row=6, column=0, sticky=W+E)

inicio = Entry(ventana, width=50)
inicio.grid(row=6, column=0)

Label(ventana, text="FechaFinRenta", width=60,
      anchor="w").grid(row=7, column=0, sticky=W+E)

fin = Entry(ventana, width=50)
fin.grid(row=7, column=0)

Label(ventana, text="PrecioRentaDía", width=60,
      anchor="w").grid(row=8, column=0, sticky=W+E)

precio = Entry(ventana, width=50)
precio.grid(row=8, column=0)

Label(ventana, text="MarcaAuto", width=60, anchor="w").grid(
    row=9, column=0, sticky=W+E)

marca = Entry(ventana, width=50)
marca.grid(row=9, column=0)

Label(ventana, text="ModeloAuto", width=60, anchor="w").grid(
    row=10, column=0, sticky=W+E)

modelo = Entry(ventana, width=50)
modelo.grid(row=10, column=0)

Label(ventana, text="ColorAuto", width=60, anchor="w").grid(
    row=11, column=0, sticky=W+E)

color = Entry(ventana, width=50)
color.grid(row=11, column=0)

Label(ventana, text="PlacaAuto", width=60, anchor="w").grid(
    row=12, column=0, sticky=W+E)

placa = Entry(ventana, width=50)
placa.grid(row=12, column=0)

""" Botones de la Aplicación """
crear = Button(ventana, text="Insertar Datos", command=insertarDatos,
               bg="dodgerblue", fg="black", width=20, height=3)
crear.grid(row=2, column=1, columnspan=1, rowspan=3)

actualizar = Button(ventana, text="Actualizar Datos", command=actualizarDatos,
                    bg="dodgerblue", fg="black", width=20, height=3)
actualizar.grid(row=5, column=1, columnspan=1, rowspan=3)
actualizar["state"] = "disabled"

eliminar = Button(ventana, text="Eliminar Datos", command=eliminarDatos,
                  bg="dodgerblue", fg="black", width=20, height=3)
eliminar.grid(row=8, column=1, columnspan=1, rowspan=3)
eliminar["state"] = "disabled"

buscar = Button(ventana, text="Buscar Datos", command=buscarDatos,
                bg="dodgerblue", fg="black", width=20, height=3)
buscar.grid(row=11, column=1, columnspan=1, rowspan=3)

mostrarDatos()

ventana.mainloop()  # Control de la Ventana Principal


 




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)