elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: [1] 2 3 4
1  Programación / Scripting / ¿Python nos hace acostumbrarnos a la bueno? en: 3 Marzo 2019, 14:21 pm
Hola!

Cabe decir que esta duda o pregunta no es una critica a ningun lenguaje. Yo reconozco mi gusto por python. Cada cual tendra un lenguaje preferido.

Pero es algo curioso que muchos programadores que vienen de lenguajes mas "duros" como C++ les resulta sencillo (que por otra parte es logico) acostumbrarse a python. Se puede decir que tienen la ventaja, en el aprendizaje de python, a simplificar algo mas el codigo. Por lo tanto les puede ser sencillo dar ese paso.

Pero claro, cuando uno viene de python e intenta conocer C++ la cosa cambia. Uno se intenta motivar con las tipicas frases de que es un lenguaje (el C++) que se debe conocer, que es mas rapido, mas potente, mas...etc,etc...

Es facil la motivacion de C++ a python con un simple "Hola Mundo". Pero los que venimos de python ¿Como nos motivamos con el "Hola Mundo" de C++?

Casi todos los programadores tienen un lenguaje que usan mas que otros. O el tipico lenguaje de cabecera. Yo no escondo mi predileccion por python. Pero tenia curiosidad por conocer C++. El inconveniente es que lo resulta sencillo en python, en C++ lo veo muy rebuscado. Por no hablar de su sintaxis. Aunque entiendo que esto es algo subjetivo.

Supongo, que la mayoria de programadores que estan por aqui, conocen y programan en varios lenguajes. Me gustaria saber como se motivan a programar en otro lenguaje donde han de hacer 20 lineas de codigo donde con su lenguaje favorito necesitan un par.

2  Programación / Scripting / ¿Se pueden usar los modulos pygame y tkinter juntos? [PYTHON] en: 30 Noviembre 2018, 17:55 pm
Hola de nuevo!  :D

He revisado mis propios temas en el foro porque tenia dudas si algun dia formule esa pregunta. Y ya veo que no. Quizas en su dia deje aparcado el tema.

Pues bien, ¿Sabeis si estos modulos se llevan bien? Echando un vistazo por Don Google hay opiniones dispares. Unos dicen que si, otros lo contrario. Como la mayoria de las cuestiones en programacion  ;D

Ambos modulos basan su filosofia en bucles. En pygame el tipico bucle while. Y en tkinter el mainloop. Y claro, dos bucles trabajando a la vez...complicado.

Por otro lado he pensado en hilos (threads). Para cosas basicas (o hasta donde yo llego) los puedo utilizar. Pero claro, si el script crece exponencialmente no se si sabria manejar todo el tinglado.

La idea de todo esto es poder crear dos ventanas para la creacion de un juego. La de pygame seria el escenario y el juego en si. Y la otra ventana, tkinter, donde podriamos cambiar las configuraciones de dicho juego. Y que estos cambios se vieran en tiempo real en la ventana de pygame.

Claro esta que seria algo muy basico. Mas que nada para ver si ambos modulos pueden trabajar de forma paralela.

Todavia no he creado ningun script sobre esto. Es para si pensais que no vale la pena ni intentarlo.

Venga, un saludo!
3  Programación / Scripting / ¿Ya no es necesario __init__.py en los paquetes [PYTHON 3.xx] en: 20 Agosto 2018, 21:17 pm
Hola de nuevo  ;)

A dia de hoy no habia usado paquetes con python. Solia importar los modulos dentro de la misma carpeta del script principal y ya me bastaba.

La cosa esta que he visto algunos videos recientes, incluso usando Python 3, y el creador del mismo suele poner __init__.py (que normalmente es un script vacio) dentro de cada paquete. Y claro, yo lo he probado sin poner este archivo y me funciona igual.

Incluso he puesto varios modulos dentro de una paquete (o carpeta) y me los reconoce igualmente. Es decir, se importa el paquete y luego cualquier modulo del mismo.

La sintaxis que utilizo es la normal:

Código
  1. from paquete.modulo_1 import funcion

paquete es un carpeta, modulo_1 uno de los scripts dentro del paquete y funcion dentro del modulo_1

¿Es correcto? ¿Para que poner el __init__.py si me funciona igual?

Saludos!
4  Programación / Scripting / Usar el portapapeles con tkinter [PYTHON] en: 1 Abril 2018, 20:17 pm
Hola de nuevo!

Pues esa es la duda que tengo. No se si hay algún método en tkinter para poder importar/exportar el contenido del portapapeles. Aunque lo que mas me interesa es poder copiar el contenido a un widget Entry. Osea, lo que escribamos en el bloc de notas, por ejemplo, poder pegarlo en la caja del widget Entry.

He visto por alguna web que usan el método:

Código
  1. ventana = Tk()
  2. ventana.withdraw()

Y luego hacen una llamada como:

Código
  1. ventana.clipboard_get()

En todo caso, me gustaría saber, como se enlaza todo esto con Entry o cual es la forma correcta de hacerlo.

Un saludo!

EDITO:

He probado algún código y lo que mas se asemeja lo pongo en el siguiente script. Pero para que funcione primero hemos de copiar el texto y luego abrir nuestro programa con tkinter. Y claro, queda un poco chusquero. Me gustaría que sin cerrar nuestra aplicación se pudiera hacer copy/paste en tiempo real.

Código
  1. from tkinter import Tk, Entry, StringVar
  2.  
  3. raiz = Tk()
  4. copiado = raiz.clipboard_get()
  5.  
  6. varEntry = StringVar()
  7. e1 = Entry(raiz, textvariable = varEntry)
  8. e1.place(x = 0, y = 0)
  9. varEntry.set(copiado)
  10.  
  11. raiz.mainloop()
  12.  

Bueno, creo que esto es mas o menos lo que queria conseguir. He añadido un Button para ir actualizando lo que se copia en el portapapeles. No se si es la forma correcta de hacerlo. Por si alguien le interesa, pongo mi script:

Código
  1. from tkinter import Tk, Entry, StringVar, Button
  2.  
  3. raiz = Tk()
  4.  
  5. def pegar():
  6.    pegado = raiz.clipboard_get()
  7.    varEntry.set(pegado)
  8.  
  9.  
  10.  
  11. b1 = Button(raiz, text = 'Pegar', command = pegar)
  12. b1.place(x = 0, y = 50)
  13.  
  14. varEntry = StringVar()
  15. e1 = Entry(raiz, textvariable = varEntry)
  16. e1.place(x = 0, y = 0)
  17.  
  18.  
  19. raiz.mainloop()
  20.  
  21.  
5  Programación / Scripting / Tkinter, inhabilitar widgets mientras procesa el script [PYTHON] en: 30 Diciembre 2017, 19:19 pm
Hola de nuevo!

He leído algo sobre el uso de while con tkinter. Osea, que no se llevan muy bien. Por el tema que se congela la GUI. Aunque también ocurre cuando se realizan cálculos que tardan.

Me he informado un poco y veo que se suelen usar los hilos o threads para evitar estos problemas.

La cosa, es, que tenia realizado un pequeño programa en consola. Y me hacia gracia retocarlo con tkinter. Osea, que los resultados e impresiones ya no fueran por consola, si no por la GUI.

Al entrar por primera vez al programa, este, realiza unos cálculos. En ese caso la consola se quedaba a la espera. Cuando realizaba la tarea, mostraba los resultados. Hasta ahí, todo bien.

Con tkinter cree un boton para realizar esos calculos. Y entonces es cuando se congela. Cosa que no me importa. Ya que con el resultado de ellos, he de trabajar luego. Es decir, no me importa esperar. Lo que no quiero es que al tocar otro botón de la GUI (mientra realiza los calculos) ponga el nefasto mensaje de 'no responde'.

La idea es, si en tkinter, hay alguna forma de inhabilitar los widgets y que así no de la opción a ese mensaje de 'programa no responde'. Y cuando el script acabe los cálculos, los widgets estén operativos.

No se si me explico. La idea no es trabajar en multiproceso o varias tareas a la vez. En vez de eso, que no podamos tocar nada mientras hacemos dichos cálculos.

Con este simple script (mientras en consola se va imprimiendo) si nos da por tocar el botón de nuevo o clicar en la ventana, la GUI se congela ¿Se puede inhabilitar mientras se imprime en la consola? (esto solo es un ejemplo)

Código
  1. from tkinter import Tk, Button
  2.  
  3.  
  4. ventana = Tk()
  5. ventana.geometry('300x300+100+100')
  6.  
  7. def cuenta():
  8.  
  9.    for i in range(1, 100000):
  10.        print(i)      
  11.  
  12.  
  13. btn = Button(ventana, text = 'Pulsa', command = cuenta)
  14. btn.place(x = 10, y = 10)
  15.  
  16.  
  17. ventana.mainloop()

Gracias!
6  Programación / Scripting / ¿Alguien usa la librería tix de tkinter? [PYTHON] en: 22 Noviembre 2017, 18:49 pm
Hola de nuevo!

Pues esa es la pregunta...

Conociendo un poquito los widgets standard del modulo tkinter (la librería tk), estos se han ampliado (a partir de la versión 8.5) con las librerías ttk y tix.

En cuando a la ttk veo mas documentación, pero con la tix no he visto gran cosa. Y era para ver si alguien le ha sacado provecho o casi no se utiliza. He decir, que yo uso tkinter para pequeños proyectos. Y creo que puede ser mas que suficiente con tk y ttk.

Y otra duda que tengo, es, si los widgets que coinciden entre estas librerías se comportan igual o tienen alguna mejora entre ellas. Por ejemplo, si el widget Button es igual o tiene el mismo comportamiento entre tk y ttk.

Saludos!  :D
7  Programación / Scripting / Solución de problemas con algoritmos y estructura de datos [PYTHON] en: 22 Octubre 2017, 17:53 pm
Hola de nuevo!

Os dejo el enlace de un libro en línea muy interesante. Agradecer a sus autores (Brad Miller y David Ranum) y al traductor del mismo (Mauricio Orozco-Alzate) esta grandiosa aportación. Lástima que no se pueda adquirir en PDF. Pero bueno, tampoco nos vamos a poner exigentes  :rolleyes:


EDITO:

He visto que accediendo desde el enlace informa como página no segura. En todo caso, si ponéis en el buscador de Google esto:

Solución de problemas con algoritmos y estructuras de datos usando Python

Es la primera entrada que sale.
8  Programación / Scripting / ¿Recomendáis usar POO con tkinter? en: 16 Octubre 2017, 18:59 pm
Hola de nuevo!  :D

Ya sé que es muy subjetiva la pregunta. Y quizás dependerá del tamaño del script. Pero después de ver algunos tutoriales (vídeos, webs, blogs...), los creadores de los mismos enseñan tkinter sin usar la POO. Aunque también es verdad, que en python, siempre estamos trabajando con objetos. Incluso con tkinter para hacer una simple ventana ya estamos instanciando de la clase:

Código
  1. ventana = Tk()

Por eso tengo la duda si es redundante crear clases sobre clases. Y si por otro lado se enreda mucho el código.

Quizás, como algunos programadores, tengo algunas dudas de cuando usar clases (o la POO) y cuando no.

Cuando empiezo a crear un código es como si otro programador invisible me estuviera diciendo ¡Ostras, usa la POO! Pero en tkinter no la veo tan imprenscindible.

Bueno, un saludo!
9  Programación / Scripting / ¿Se puede simplificar el código del Checkbutton en tkinter? [SOLUCIONADO] :) en: 9 Julio 2017, 18:21 pm
Hola de nuevo!  :D

Llevo un tiempo haciendo programas de Python en consola. Ahora me he decidido por usar una GUI. Y me he decantado por tkinter. He ido conociendo un poco los widgets y con el Checkbutton me han asaltado unas dudas:

En casi todos los ejemplos se crean unos pocos Checkbutton. Para cada uno de ellos se debe crear la variable de su estado y una función (normalmante llamada por command del widget Button). Pero claro, si queremos crear, por ejemplo, diez o veinte Checkbutton la cosa se desmadra y se crea un código redundante y repetitivo.

Ejemplo:

Código
  1. def imprime():
  2.    global lista
  3.    lista = []
  4.    if _1.get() == 1:
  5.        lista.append(1)
  6.    if _2.get() == 1:
  7.        lista.append(2)
  8.    if _3.get() == 1:
  9.        lista.append(3)
  10.    if _4.get() == 1:
  11.        lista.append(4)
  12.    if _5.get() == 1:
  13.        lista.append(5)
  14.    if _6.get() == 1:
  15.        lista.append(6)
  16.    if _7.get() == 1:
  17.        lista.append(7)
  18.    if _8.get() == 1:
  19.        lista.append(8)
  20.    if _9.get() == 1:
  21.        lista.append(9)
  22.    if _10.get() == 1:
  23.        lista.append(10)
  24. _1 = IntVar()
  25. _2 = IntVar()
  26. _3 = IntVar()
  27. _4 = IntVar()
  28. _5 = IntVar()
  29. _6 = IntVar()
  30. _7 = IntVar()
  31. _8 = IntVar()
  32. _9 = IntVar()
  33. _10 = IntVar()
  34. chk1 = Checkbutton(ventana, text = '1', variable = _1, onvalue = 1, offvalue = 0).place(x = 10, y = 30)
  35. chk2 = Checkbutton(ventana, text = '2', variable = _2, onvalue = 1, offvalue = 0).place(x = 10, y = 60)
  36. chk3 = Checkbutton(ventana, text = '3', variable = _3, onvalue = 1, offvalue = 0).place(x = 10, y = 90)
  37. chk4 = Checkbutton(ventana, text = '4', variable = _4, onvalue = 1, offvalue = 0).place(x = 10, y = 120)
  38. chk5 = Checkbutton(ventana, text = '5', variable = _5, onvalue = 1, offvalue = 0).place(x = 10, y = 150)
  39. chk6 = Checkbutton(ventana, text = '6', variable = _6, onvalue = 1, offvalue = 0).place(x = 10, y = 180)
  40. chk7 = Checkbutton(ventana, text = '7', variable = _7, onvalue = 1, offvalue = 0).place(x = 10, y = 210)
  41. chk8 = Checkbutton(ventana, text = '8', variable = _8, onvalue = 1, offvalue = 0).place(x = 10, y = 240)
  42. chk9 = Checkbutton(ventana, text = '9', variable = _9, onvalue = 1, offvalue = 0).place(x = 10, y = 270)
  43. chk10 = Checkbutton(ventana, text = '10', variable = _10, onvalue = 1, offvalue = 0).place(x = 60, y = 30)


Esto es un extracto del código. El que hace referencia a la duda que me surge. Es decir, se puede dar el caso que un programa tenga 100 casillas a seleccionar ¿Cómo se puede evitar este código tan repetitivo?

Saludos!
10  Programación / Scripting / Simular la salida de un ciclo FOR con pygame [PYTHON] en: 5 Junio 2017, 13:50 pm
Hola de nuevo!

Quizás recomendaríais otro tipo de modulo para este tipo de impresiones. Bueno, me refiero a mostrar gráficas y salida de datos. Pygame se suele utilizar para el tema de videojuegos y multimedia. Algo tan simple como mostrar la salida de un ciclo FOR (u otras salidas de datos) no  me llegaba a aclarar. En todo caso, me gustaría saber vuestra opinión, si es la forma correcta de hacer esta implementación.

Creo un ciclo para mostrar 40 números. Pero como llega un momento que la ventana definida en pygame se queda pequeña, hemos de crear otra columna para que se muestre el resto de números. Lo ideal seria que se creasen tantas columnas como números del ciclo. Claro esta que llegaría un momento que también se llegaría al limite de esa misma ventana ¿Se debería crear una nueva ventana y perderíamos la anterior? ¿Pygame no tiene la barra de desplazamiento como las ventanas de windows?

Os dejo el código que he creado:
(Es un esquema básico o plantilla para mostrar el ejemplo)

Código
  1. import pygame
  2. import sys
  3. pygame.init()
  4.  
  5. pantalla = pygame.display.set_mode((800, 600))
  6. fuente = pygame.font.SysFont('Comic Sans MS', 20, True, False)
  7.  
  8. while True:
  9.  
  10.    for evento in pygame.event.get():
  11.        if evento.type == pygame.QUIT:
  12.            pygame.quit()
  13.            sys.exit()            
  14.  
  15.    pantalla.fill((255, 255, 255))
  16.  
  17.    # Coordenadas iniciales impresion de columnas
  18.    y = 0
  19.    x = 0
  20.    for numero in range(1, 41):        
  21.        imprime_numero = fuente.render(str(numero), True, (0, 0, 0))
  22.        pantalla.blit(imprime_numero, (x, y))
  23.        y += 20
  24.        # Si la coordenada 'y' llega a 400 se crea una nueva columna
  25.        if y == 400:
  26.            x = 40
  27.            y = 0                  
  28.  
  29.    pygame.display.flip()


Si lo ejecutáis se crea una columna del 1 al 20 y otra del 21 al 40.
¿Es la forma correcta de imprimir un ciclo FOR en pygame?

Saludos!

EDITO:

Con esta modificación en la linea 26 se crean mas columnas en base a mas números en el ciclo:
Código
  1. x += 40
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines