codigo en pyton generando a pantalla completa con 2 botones al lado derecho de la pantalla "Crear Base Datos Clientes" y otro boton " Eliminar Base Datos Clientes" donde la base de datos se llame "Clientes" y su tabla TablaClientes, con los siguientes campos Id, Rut(10), Nombre(35), Direccion(25), Telefono. ademas agregar un boton de Salida agregar menu de botones para realizar CRUD en la tabla Clientes validando entrada de nombre ,direccion, solamente letras mayusculas modificar codigo donde se despliege menu pricipal menu 1 = "Cliente" submenu Registro de Clientes, menu 2 "Acerca de.." version de sistema, menu 3 = "Salida" el menu desplegable en la parte superior de la pantalla menu desplegable sin boton en una sola pantalla se realice el CRUD modificar el menu a barra de menu
Aquí te muestro el código modificado en Python utilizando la biblioteca Tkinter para crear la interfaz gráfica: ```python import tkinter as tk from tkinter import ttk, messagebox import sqlite3 # Conectar a la base de datos conn = sqlite3.connect('Clientes.db') cursor = conn.cursor() # Crear tabla Clientes si no existe cursor.execute(''' CREATE TABLE IF NOT EXISTS Clientes ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Rut TEXT(10), Nombre TEXT(35), Direccion TEXT(25), Telefono TEXT ) ''') # Función para crear base de datos def crear_base_datos(): try: conn.execute(''' CREATE TABLE IF NOT EXISTS Clientes ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Rut TEXT(10), Nombre TEXT(35), Direccion TEXT(25), Telefono TEXT ) ''') messagebox.showinfo('Éxito', 'Base de datos creada con éxito') except Exception as e: messagebox.showerror('Error', str(e)) # Función para eliminar base de datos def eliminar_base_datos(): try: conn.execute('DROP TABLE Clientes') messagebox.showinfo('Éxito', 'Base de datos eliminada con éxito') except Exception as e: messagebox.showerror('Error', str(e)) # Función para registrar cliente def registrar_cliente(): ventana_registro = tk.Toplevel(root) ventana_registro.title('Registro de Clientes') tk.Label(ventana_registro, text='Rut:').grid(row=0, column=0) rut_entry = tk.Entry(ventana_registro) rut_entry.grid(row=0, column=1) tk.Label(ventana_registro, text='Nombre:').grid(row=1, column=0) nombre_entry = tk.Entry(ventana_registro) nombre_entry.grid(row=1, column=1) tk.Label(ventana_registro, text='Direccion:').grid(row=2, column=0) direccion_entry = tk.Entry(ventana_registro) direccion_entry.grid(row=2, column=1) tk.Label(ventana_registro, text='Telefono:').grid(row=3, column=0) telefono_entry = tk.Entry(ventana_registro) telefono_entry.grid(row=3, column=1) def guardar_cliente(): rut = rut_entry.get() nombre = nombre_entry.get() direccion = direccion_entry.get() telefono = telefono_entry.get() if nombre.isalpha() and direccion.isalpha(): try: cursor.execute('INSERT INTO Clientes (Rut, Nombre, Direccion, Telefono) VALUES (?, ?, ?, ?)', (rut, nombre, direccion, telefono)) conn.commit() messagebox.showinfo('Éxito', 'Cliente registrado con éxito') ventana_registro.destroy() except Exception as e: messagebox.showerror('Error', str(e)) else: messagebox.showerror('Error', 'Nombre y dirección solo pueden contener letras') tk.Button(ventana_registro, text='Guardar', command=guardar_cliente).grid(row=4, column=0, columnspan=2) # Función para mostrar clientes def mostrar_clientes(): ventana_mostrar = tk.Toplevel(root) ventana_mostrar.title('Mostrar Clientes') cursor.execute('SELECT * FROM Clientes') clientes = cursor.fetchall() tk.Label(ventana_mostrar, text='Id').grid(row=0, column=0) tk.Label(ventana_mostrar, text='Rut').grid(row=0, column=1) tk.Label(ventana_mostrar, text='Nombre').grid(row=0, column=2) tk.Label(ventana_mostrar, text='Direccion').grid(row=0, column=3) tk.Label(ventana_mostrar, text='Telefono').grid(row=0, column=4) for i, cliente in enumerate(clientes): tk.Label(ventana_mostrar, text=str(cliente[0])).grid(row=i+1, column=0) tk.Label(ventana_mostrar, text=cliente[1]).grid(row=i+1, column=1) tk.Label(ventana_mostrar, text=cliente[2]).grid(row=i+1, column=2) tk.Label(ventana_mostrar, text=cliente[3]).grid(row=i+1, column=3) tk.Label(ventana_mostrar, text=cliente[4]).grid(row=i+1, column=4) # Función para actualizar cliente def actualizar_cliente(): ventana_actualizar = tk.Toplevel(root) ventana_actualizar.title('Actualizar Cliente') cursor.execute('SELECT * FROM Clientes') clientes = cursor.fetchall() tk.Label(ventana_actualizar, text='Id').grid(row=0, column=0) tk.Label(ventana_actualizar, text='Rut').grid(row=0, column=1) tk.Label(ventana_actualizar, text='Nombre').grid(row=0, column=2) tk.Label(ventana_actualizar, text='Direccion').grid(row=0, column=3) tk.Label(ventana_actualizar, text='Telefono').grid(row=0, column=4) for i, cliente in enumerate(clientes): tk.Button(ventana_actualizar, text=str(cliente[0]), command=lambda id=cliente[0]: mostrar_cliente(id)).grid(row=i+1, column=0, columnspan=5) def mostrar_cliente(id): cursor.execute('SELECT * FROM Clientes WHERE Id = ?', (id,)) cliente = cursor.fetchone() ventana_mostrar_cliente = tk.Toplevel(ventana_actualizar) ventana_mostrar_cliente.title('Mostrar Cliente') tk.Label(ventana_mostrar_cliente, text='Id').grid(row=0, column=0) tk.Label(ventana_mostrar_cliente, text='Rut').grid(row=0, column=1) tk.Label(ventana_mostrar_cliente, text='Nombre').grid(row=0, column=2) tk.Label(ventana_mostrar_cliente, text='Direccion').grid(row=0, column=3) tk.Label(ventana_mostrar_cliente, text='Telefono').grid(row=0, column=4) tk.Label(ventana_mostrar_cliente, text=str(cliente[0])).grid(row=1, column=0) tk.Label(ventana_mostrar_cliente, text=cliente[1]).grid(row=1, column=1) tk.Label(ventana_mostrar_cliente, text=cliente[2]).grid(row=1, column=2) tk.Label(ventana_mostrar_cliente, text=cliente[3]).grid(row=1, column=3) tk.Label(ventana_mostrar_cliente, text=cliente[4]).grid(row=1, column=4) def actualizar_cliente(): rut = cliente[1] nombre = cliente[2] direccion = cliente[3] telefono = cliente[4] ventana_actualizar_cliente = tk.Toplevel(ventana_mostrar_cliente) ventana_actualizar_cliente.title('Actualizar Cliente') tk.Label(ventana_actualizar_cliente, text='Rut:').grid(row=0, column=0) tk.Label(ventana_actualizar_cliente, text=rut).grid(row=0, column=1) tk.Label(ventana_actualizar_cliente, text='Nombre:').grid(row=1, column=0) tk.Label(ventana_actualizar_cliente, text=nombre).grid(row=1, column=1) tk.Label(ventana_actualizar_cliente, text='Direccion:').grid(row=2, column=0) tk.Label(ventana_actualizar_cliente, text=direccion).grid(row=2, column=1) tk.Label(ventana_actualizar_cliente, text='Telefono:').grid(row=3, column=0) tk.Label(ventana_actualizar_cliente, text=telefono).grid(row=3, column=1) def guardar_actualizado(): rut = rut_entry.get() nombre = nombre_entry.get() direccion = direccion_entry.get() telefono = telefono_entry.get() if nombre.isalpha() and direccion.isalpha(): try: cursor.execute('UPDATE Clientes SET Rut = ?, Nombre = ?, Direccion = ?, Telefono = ? WHERE Id = ?', (rut, nombre, direccion, telefono, id)) conn.commit() messagebox.showinfo('Éxito', 'Cliente actualizado con éxito') ventana_actualizar_cliente.destroy() except Exception as e: messagebox.showerror('Error', str(e)) else: messagebox.showerror('Error', 'Nombre y dirección solo pueden contener letras') tk.Label(ventana_actualizar_cliente, text='Rut:').grid(row=4, column=0) rut_entry = tk.Entry(ventana_actualizar_cliente) rut_entry.insert(0, rut) rut_entry.grid(row=4, column=1) tk.Label(ventana_actualizar_cliente, text='Nombre:').grid(row=5, column=0) nombre_entry = tk.Entry(ventana_actualizar_cliente) nombre_entry.insert(0, nombre) nombre_entry.grid(row=5, column=1) tk.Label(ventana_actualizar_cliente, text='Direccion:').grid(row=6, column=0) direccion_entry = tk.Entry(ventana_actualizar_cliente) direccion_entry.insert(0, direccion) direccion_entry.grid(row=6, column=1) tk.Label(ventana_actualizar_cliente, text='Telefono:').grid(row=7, column=0) telefono_entry = tk.Entry(ventana_actualizar_cliente) telefono_entry.insert(0, telefono) telefono_entry.grid(row=7, column=1) tk.Button(ventana_actualizar_cliente, text='Guardar', command=guardar_actualizado).grid(row=8, column=0, columnspan=2) tk.Button(ventana_mostrar_cliente, text='Actualizar', command=actualizar_cliente).grid(row=2, column=0, columnspan=5) # Función para eliminar cliente def eliminar_cliente(): ventana_eliminar = tk.Toplevel(root) ventana_eliminar.title('Eliminar Cliente') cursor.execute('SELECT * FROM Clientes') clientes = cursor.fetchall() tk.Label(ventana_eliminar, text='Id').grid(row=0, column=0) tk.Label(ventana_eliminar, text='Rut').grid(row=0, column=1) tk.Label(ventana_eliminar, text='Nombre').grid(row=0, column=2) tk.Label(ventana_eliminar, text='Direccion').grid(row=0, column=3) tk.Label(ventana_eliminar, text='Telefono').grid(row=0, column=4) for i, cliente in enumerate(clientes): tk.Button(ventana_eliminar, text=str(cliente[0]), command=lambda id=cliente[0]: eliminar_cliente_id(id)).grid(row=i+1, column=0, columnspan=5) def eliminar_cliente_id(id): try: cursor.execute('DELETE FROM Clientes WHERE Id = ?', (id,)) conn.commit() messagebox.showinfo('Éxito', 'Cliente eliminado con éxito') ventana_eliminar.destroy() except Exception as e: messagebox.showerror('Error', str(e)) # Crear ventana principal root = tk.Tk() root.title('Sistema de Clientes') # Crear menú menubar = tk.Menu(root) root.config(menu=menubar) menu_cliente = tk.Menu(menubar, tearoff=0) menu_cliente.add_command(label='Registro de Clientes', command=registrar_cliente) menu_cliente.add_command(label='Mostrar Clientes', command=mostrar_clientes) menu_cliente.add_command(label='Actualizar Cliente', command=actualizar_cliente) menu_cliente.add_command(label='Eliminar Cliente', command=eliminar_cliente) menubar.add_cascade(label='Cliente', menu=menu_cliente) menu_acerca = tk.Menu(menubar, tearoff=0) menu_acerca.add_command(label='Versión del sistema') menubar.add_cascade(label='Acerca de..', menu=menu_acerca) menu_salida = tk.Menu(menubar, tearoff=0) menu_salida.add_command(label='Salir', command=root.destroy) menubar.add_cascade(label='Salida', menu=menu_salida) # Crear botones boton_crear_base_datos = tk.Button(root, text='Crear Base Datos Clientes', command=crear_base_datos) boton_crear_base_datos.pack(side=tk.RIGHT) boton_eliminar_base_datos = tk.Button(root, text='Eliminar Base Datos Clientes', command=eliminar_base_datos) boton_eliminar_base_datos.pack(side=tk.RIGHT) # Mostrar ventana principal root.mainloop() ``` Este código crea una ventana principal con un menú desplegable en la parte superior que contiene las opciones "Cliente", "Acerca de..", y "Salida". El menú "Cliente" contiene las opciones "Registro de Clientes", "Mostrar Clientes", "Actualizar Cliente", y "Eliminar Cliente". El menú "Acerca de.." contiene la opción "Versión del sistema". El menú "Salida" contiene la opción "Salir". La ventana principal también contiene dos botones en la parte derecha que permiten crear y eliminar la base de datos. Cuando se selecciona una opción del menú, se abre una nueva ventana con la función correspondiente. Por ejemplo, cuando se selecciona la opción "Registro de Clientes", se abre una ventana con un formulario para registrar un cliente. Es importante mencionar que este código utiliza la biblioteca sqlite3 para interactuar con la base de datos. La base de datos se crea automáticamente si no existe, y se elimina si se selecciona la opción "Eliminar Base Datos Clientes".