|
1
|
Programación / Scripting / Re: Función en Python
|
en: Hoy a las 01:29
|
mm ya veo, pues en realidad el problema sigue siendo este: el alcance de tus variables o donde las variables pueden utilizarse, tenes que organizar tu codigo en bloques para que te guies qué datos le estas enviando a las funciones. Python no te impone ninguna forma de codear pero en general siempre es mejor utilizar una estructura en tus programas. Es decir, tendrias que organizar tu codigo en funciones o clases. considera este refactor, le agregue las explicaciones en forma de comentarios, la funcion main() es la principal y llama agregar_cliente, en agregar_cliente se ingresan los datos pero a diferencia de antes, una mejor opcion es encapsularlos en una unidad tipo cliente, por ejemplo un diccionario. Este cliente (encapsulado) se manda a la funcion alta o baja, de manera que estas funciones pueden procesar al cliente. pruebalo y me comentas si tienes dudas: import tkinter import sqlite3 '''from tkinter import * esto puede traer problemas, te conviene importar solo lo que necesitas usar''' # Crear la función para el boton Cliente def agregar_cliente(ventana): # Crear etiquetas tkinter.Label(ventana, text='ID:').grid(row=1, column=0) tkinter.Label(ventana, text='Nombre:').grid(row=2, column=0) tkinter.Label(ventana, text='Direccion:').grid(row=3, column=0) tkinter.Label(ventana, text='Telefono').grid(row=4, column=0) # Crear cuadros de texto cuadroID = tkinter.StringVar() tkinter.Entry(ventana, width=30, textvariable=cuadroID).grid(row=1, column=1) cuadroNombre = tkinter.StringVar() tkinter.Entry(ventana, width=30, textvariable=cuadroNombre).grid(row=2, column=1) cuadroDireccion = tkinter.StringVar() tkinter.Entry(ventana, width=30, textvariable=cuadroDireccion).grid(row=3, column=1) cuadroTelefono = tkinter.StringVar() tkinter.Entry(ventana, width=30, textvariable=cuadroTelefono).grid(row=4, column=1) '''cuando llamas al boton dar de alta, creas un diccionario o estructura de datos del cliente, de manera que esta todo encapsulado en una unidad''' # Crear botones tkinter.Button(ventana, text='Dar de Alta', command=lambda: alta( { 'id': cuadroID.get(), 'nombre': cuadroNombre.get(), 'direccion': cuadroDireccion.get(), 'telefono': cuadroTelefono.get() } )).grid(row=5, column=0) '''lo mismo en baja''' tkinter.Button(ventana, text='Dar de Baja', command=lambda: baja( { 'id': cuadroID.get(), 'nombre': cuadroNombre.get(), 'direccion': cuadroDireccion.get(), 'telefono': cuadroTelefono.get() } )).grid(row=5, column=1) # Crear la función para el boton Alta def alta(cliente): ''' id_cliente = cuadroID.get() nombre_cliente = cuadroNombre.get() direccion_cliente = cuadroDireccion.get() telefono_cliente = cuadroTelefono.get() # Agregar los datos a la tabla de la base de datos datos = [id_cliente, nombre_cliente, direccion_cliente, telefono_cliente] cursor.execute("INSERT INTO tabla_clientes VALUES (?, ?, ?, ?)", datos) conexion.commit() ''' '''la funcion alta recibe ya un cliente en forma de estructura de datos''' print(f'Se dara de alta: {cliente}') print(f"Tiene ID:' {cliente['id']}") print(f"Tiene nombre: {cliente['nombre']}") # Crear la función para el boton Baja def baja(cliente): ''' id_cliente = cuadroID.get() cursor.execute("DELETE FROM tabla_clientes WHERE id = ?", [id_cliente]) conexion.commit() ''' '''lo mismo la funcion baja''' print(f'Se dara de baja: {cliente}') def main(): # Crear una ventana principal ventana = tkinter.Tk() ventana.title("Entorno Gráfico") ventana.geometry("500x250") # Crear la conexión con la base de datos conexion = sqlite3.connect("base_datos.db") cursor = conexion.cursor() '''aca llamas a la funcion agregar_cliente y le pasas la referencia de la ventana padre''' # Crear el boton Clientes botonClientes = tkinter.Button(ventana, text="Clientes", command=lambda:agregar_cliente(ventana) ) botonClientes.grid(row=0, column=0) # Iniciar el programa ventana.mainloop() if __name__ == '__main__': main()
|
|
|
2
|
Programación / Scripting / Re: Función en Python
|
en: Ayer a las 21:55
|
Hola, tu problema es que las variables no son accesibles desde el metodo alta(), además no veo que utilices StringVar(), por lo que sé, el componente Entry tiene que asociarse a una variable tipo StringVar() para que puedas guardar el contenido del entry. Entonces lo que tenes que hacer es guardar el contenido que el usuario introduce en el componente Entry con una variable StringVar() y luego en el evento del botón de 'dar alta' le tienes que pasar la referencia a la función que procesa el evento y además el CONTENIDO de Entry. Fijate este ejemplo muy simple: import tkinter def evento_enviar(entradaNombre): print(f'Usuario ingresó: {entradaNombre.get()}') def main(): ventana = tkinter.Tk() ventana.geometry('600x400') tkinter.Label(ventana, text='Ingrese su nombre --> ').grid(row=0, column=0) entradaNombre = tkinter.StringVar() tkinter.Entry(ventana, width=30, textvariable=entradaNombre).grid(row=0, column=1) tkinter.Button(ventana, text='Enviar', command=lambda: evento_enviar(entradaNombre)).grid(row=0, column=2) ventana.mainloop() if __name__ == '__main__': main()
Por ultimo nota que esto tambien se podria solucionar si utilizas POO, donde podrias hacer que los datos sean atributos de la clase y por lo tanto compartidos a lo largo del codigo de la clase.
|
|
|
3
|
Programación / Desarrollo Web / Re: dudas básicas web
|
en: 15 Marzo 2023, 13:17 pm
|
hola, por lo que sé, sí. Todas las páginas utilizan html, que es su estructura básica. PHP es un lenguaje del lado del servidor y no del cliente (navegador). El lenguaje que añade interactividad en la página es javascript. CSS es la parte que se encarga del estilo visual de un web. No hay alternativas a CSS, hay frameworks de CSS que ofrecen más funcionalidades, pero se basan en CSS y es imposible evitarlo.
|
|
|
4
|
Programación / .NET (C#, VB.NET, ASP) / Re: ¿Se puede considerar C# como multiplataforma?
|
en: 12 Marzo 2023, 22:27 pm
|
Ya veo, pues yo tenia el mismo problema cuando queria aprender C# (me andaba mal el Visual Studio en una note que tengo), entonces usaba el metodo que te mencioné de Notepad++. Por ejemplo, esto muestra un message box con el mensaje hello. Esto está hecho en notepad++. Fijate que se añade el espacio de nombres Windows.Forms, para usar esos componentes. using System; using System.Windows.Forms; namespace app { public class Program { static void Main(string[] args) { MessageBox.Show("Hello"); Console.ReadLine(); } } }
Luego se pueden programar aplicaciones para Android tanto en Java como en .NET (con xamarin).
|
|
|
5
|
Programación / .NET (C#, VB.NET, ASP) / Re: ¿Se puede considerar C# como multiplataforma?
|
en: 12 Marzo 2023, 22:25 pm
|
Ya veo, pues yo tenia el mismo problema cuando queria aprender C# (me andaba mal el Visual Studio en una note que tengo), entonces usaba el metodo que te mencioné de Notepad++. Por ejemplo, esto muestra un message box con el mensaje hello. Esto está hecho en notepad++. Fijate que se añade el espacio de nombres Windows.Forms, para usar esos componentes. using System; using System.Windows.Forms; namespace app { public class Program { static void Main(string[] args) { MessageBox.Show("Hello"); Console.ReadLine(); } } }
|
|
|
6
|
Foros Generales / Foro Libre / Re: Efectos de los chatbot's de IA en la sociedad
|
en: 10 Marzo 2023, 19:39 pm
|
En mi opinión, es una herramienta más a disposición nuestra, y en ultima instancia depende del que la use. Ocurrió algo parecido con muchos avances a lo largo de la historia: imaginate que en la antiguedad, algunos sabios decian que la escritura era algo que debilitaba a la mente, porque ya no se utilizaba la memoria sino que se leia desde el papel. la calculadora nos permite hacer calculos muy rapidamente, por ejemplo un cientifico no podria realizar avances tan rapidamente sin una calculadora. Pero ni el cientifico mas brillante podria igualar a la velocidad de una calculadora y ponerse 'triste' por no poder ser tan rapido como ella es una tonteria. el internet es una muy potente herramienta, donde puedes aprender de todo, aunque tambien es una 'fuga de cerebros', debido a la cantidad de contenido de entrenimiento disponible. Mi opinion sobre la ia es que una herramienta que nos va a permitir hacer avances en otros campos y tareas, y puede utilizarse para fines utiles como no. Pero sí es cierto que va a traer nuevos retos, por ejemplo, los maestros van a tener que estar atentos a ver si sus alumnos utilizan esta nueva version del rincon del vago potenciada 
|
|
|
7
|
Programación / .NET (C#, VB.NET, ASP) / Re: ¿Se puede considerar C# como multiplataforma?
|
en: 10 Marzo 2023, 19:27 pm
|
Pues la verdad es que sí, Visual Studio en mi opinión es un IDE 'pesado', pero ofrece muchas facilidades y herramientas para trabajar en Windows, sin duda la mejor es la interfaz grafica que te permite arrastrar los componentes de la forma con mucha facilidad. Otra ventaja es que se actualiza a la última versión de .net.
Igual cuando quiero hacer un codigo sencillo en C# utilizo notepad++, con el plugin CS-Script, lo cual es mucho mas ligero y facil, pero la desventaja es que utiliza una versión de .net más atrasada.
|
|
|
9
|
Programación / Programación C/C++ / Re: Ayuda con un código
|
en: 4 Marzo 2023, 03:24 am
|
Lo que buscabas era calcular los factores de un número no? bueno lo puedes hacer así: #include <stdio.h> int main() { int num = 0; printf("Ingrese un numero --> "); printf("Factores de %d:\n", num ); for(int i = num; i >= 1; i--) { if( num % i == 0 ) { } } return 0; }
La lógica de esto es la siguiente, el usuario ingresa un numero y se guarda en la variable num, luego, en un bucle for, se iguala una variable auxiliar i a el numero que ingreso el usuario. Luego se utiliza el operador modulo (%) que devuelve el resto de una división entre dos números. Si el resto es cero significa que ese número es divisor o factor del otro, entonces lo mostramos por pantalla. Si no entiendes algo, avisame y te explico, saludos.
|
|
|
10
|
Programación / Programación C/C++ / Re: Ayuda con un código
|
en: 4 Marzo 2023, 02:29 am
|
Hola, entiendo que eres muy nuev@ en la programación, ya que el código tiene errores que son muy evidentes y fáciles de ver a simple vista. error 1:
error 2: goto Divmod
No está recomendado utilizar goto, tampoco break. A no ser que sepas muy bien lo que haces.
|
|
|
|
|
|
|