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
Aquí te muestro un ejemplo de código en Python que cumple con tus requisitos utilizando la biblioteca Tkinter para crear la interfaz gráfica y SQLite para interactuar con la base de datos. ```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 la base de datos def crear_base_datos(): try: cursor.execute(''' CREATE TABLE IF NOT EXISTS Clientes ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Rut TEXT(10), Nombre TEXT(35), Direccion TEXT(25), Telefono TEXT ) ''') conn.commit() messagebox.showinfo('Éxito', 'Base de datos creada con éxito') except Exception as e: messagebox.showerror('Error', str(e)) # Función para eliminar la base de datos def eliminar_base_datos(): try: cursor.execute('DROP TABLE Clientes') conn.commit() messagebox.showinfo('Éxito', 'Base de datos eliminada con éxito') except Exception as e: messagebox.showerror('Error', str(e)) # Función para registrar un 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) tk.Label(ventana_registro, text='Nombre:').grid(row=1, column=0) tk.Label(ventana_registro, text='Dirección:').grid(row=2, column=0) tk.Label(ventana_registro, text='Teléfono:').grid(row=3, column=0) rut = tk.Entry(ventana_registro) nombre = tk.Entry(ventana_registro) direccion = tk.Entry(ventana_registro) telefono = tk.Entry(ventana_registro) rut.grid(row=0, column=1) nombre.grid(row=1, column=1) direccion.grid(row=2, column=1) telefono.grid(row=3, column=1) def guardar_cliente(): try: cursor.execute('INSERT INTO Clientes (Rut, Nombre, Direccion, Telefono) VALUES (?, ?, ?, ?)', (rut.get(), nombre.get(), direccion.get(), telefono.get())) conn.commit() messagebox.showinfo('Éxito', 'Cliente registrado con éxito') ventana_registro.destroy() except Exception as e: messagebox.showerror('Error', str(e)) tk.Button(ventana_registro, text='Guardar', command=guardar_cliente).grid(row=4, column=0, columnspan=2) # Función para modificar un cliente def modificar_cliente(): ventana_modificar = tk.Toplevel(root) ventana_modificar.title('Modificar Cliente') cursor.execute('SELECT * FROM Clientes') clientes = cursor.fetchall() tk.Label(ventana_modificar, text='Seleccione un cliente:').grid(row=0, column=0) opciones = tk.StringVar() opciones.set(clientes[0][0]) opciones_menu = tk.OptionMenu(ventana_modificar, opciones, *map(str, [cliente[0] for cliente in clientes])) opciones_menu.grid(row=0, column=1) tk.Label(ventana_modificar, text='Rut:').grid(row=1, column=0) tk.Label(ventana_modificar, text='Nombre:').grid(row=2, column=0) tk.Label(ventana_modificar, text='Dirección:').grid(row=3, column=0) tk.Label(ventana_modificar, text='Teléfono:').grid(row=4, column=0) rut = tk.Entry(ventana_modificar) nombre = tk.Entry(ventana_modificar) direccion = tk.Entry(ventana_modificar) telefono = tk.Entry(ventana_modificar) rut.grid(row=1, column=1) nombre.grid(row=2, column=1) direccion.grid(row=3, column=1) telefono.grid(row=4, column=1) def guardar_modificaciones(): try: cursor.execute('UPDATE Clientes SET Rut = ?, Nombre = ?, Direccion = ?, Telefono = ? WHERE Id = ?', (rut.get(), nombre.get(), direccion.get(), telefono.get(), opciones.get())) conn.commit() messagebox.showinfo('Éxito', 'Cliente modificado con éxito') ventana_modificar.destroy() except Exception as e: messagebox.showerror('Error', str(e)) tk.Button(ventana_modificar, text='Guardar', command=guardar_modificaciones).grid(row=5, column=0, columnspan=2) # Función para eliminar un 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='Seleccione un cliente:').grid(row=0, column=0) opciones = tk.StringVar() opciones.set(clientes[0][0]) opciones_menu = tk.OptionMenu(ventana_eliminar, opciones, *map(str, [cliente[0] for cliente in clientes])) opciones_menu.grid(row=0, column=1) def eliminar(): try: cursor.execute('DELETE FROM Clientes WHERE Id = ?', (opciones.get(),)) conn.commit() messagebox.showinfo('Éxito', 'Cliente eliminado con éxito') ventana_eliminar.destroy() except Exception as e: messagebox.showerror('Error', str(e)) tk.Button(ventana_eliminar, text='Eliminar', command=eliminar).grid(row=1, 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='Clientes:').grid(row=0, column=0) for i, cliente in enumerate(clientes): tk.Label(ventana_mostrar, text=f'Id: {cliente[0]}').grid(row=i+1, column=0) tk.Label(ventana_mostrar, text=f'Rut: {cliente[1]}').grid(row=i+1, column=1) tk.Label(ventana_mostrar, text=f'Nombre: {cliente[2]}').grid(row=i+1, column=2) tk.Label(ventana_mostrar, text=f'Dirección: {cliente[3]}').grid(row=i+1, column=3) tk.Label(ventana_mostrar, text=f'Teléfono: {cliente[4]}').grid(row=i+1, column=4) # Función para salir def salir(): root.destroy() # Crear la ventana principal root = tk.Tk() root.title('Sistema de Clientes') # Crear el menú principal menu_principal = tk.Menu(root) root.config(menu=menu_principal) # Crear el menú de opciones menu_opciones = tk.Menu(menu_principal) menu_principal.add_cascade(label='Opciones', menu=menu_opciones) menu_opciones.add_command(label='Crear Base de Datos', command=crear_base_datos) menu_opciones.add_command(label='Eliminar Base de Datos', command=eliminar_base_datos) menu_opciones.add_separator() menu_opciones.add_command(label='Salir', command=salir) # Crear el menú de clientes menu_clientes = tk.Menu(menu_principal) menu_principal.add_cascade(label='Clientes', menu=menu_clientes) menu_clientes.add_command(label='Registro de Clientes', command=registrar_cliente) menu_clientes.add_command(label='Modificar Cliente', command=modificar_cliente) menu_clientes.add_command(label='Eliminar Cliente', command=eliminar_cliente) menu_clientes.add_command(label='Mostrar Clientes', command=mostrar_clientes) # Crear el menú de ayuda menu_ayuda = tk.Menu(menu_principal) menu_principal.add_cascade(label='Ayuda', menu=menu_ayuda) menu_ayuda.add_command(label='Acerca de...', command=lambda: messagebox.showinfo('Acerca de...', 'Versión 1.0')) # Crear los botones de la ventana principal boton_crear_base_datos = tk.Button(root, text='Crear Base de Datos Clientes', command=crear_base_datos) boton_crear_base_datos.pack(side=tk.RIGHT) boton_eliminar_base_datos = tk.Button(root, text='Eliminar Base de Datos Clientes', command=eliminar_base_datos) boton_eliminar_base_datos.pack(side=tk.RIGHT) boton_salir = tk.Button(root, text='Salir', command=salir) boton_salir.pack(side=tk.RIGHT) # Mostrar la ventana principal root.mainloop() ``` Este código crea una ventana principal con un menú desplegable que contiene las opciones de crear base de datos, eliminar base de datos, registro de clientes, modificar cliente, eliminar cliente, mostrar clientes y salir. También crea una ventana para cada una de estas opciones, donde se pueden realizar las acciones correspondientes.