Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Hacer caja de texto de solo lectura (tkinter)
#1
Hola, Francisco ¿Cómo estás?, hola gente, buen día.-
Me impulsaste con tu sugerencia y aquí esta mi primer ventana, la consulta es
¿es medianamente aceptable lo que llevo del código?, te lo pregunto por 2
cuestiones una es por esto: pack(), place() y grid().
para mi es mas amigable place() que las otras dos y la otra es que me animo
a molestarte porque me paso muchas veces que hago algo de una manera
(cuando es muy nuevo) y luego resulta que era todo lo contrario.- 
Otra cosita, como hago para qué “entrada_codigo” sea de solo lectura, luego
lo habilitare.
PD: me nutro lo mas posible del tutorial del blog que pertenece a este foro(desconozco si sos el autor)

Código:
from tkinter import Tk, Button, Label, Entry

ventana = Tk()
ventana.title(" Caja de ahorro ")
ventana.geometry("500x250")
ventana.config(bg="light gray")  # color de fondo, background
ventana.config(cursor="pirate")  # tipo de cursor (arrow defecto)
ventana.config(relief="sunken")  # relieve del root
ventana.config(bd=4)                # tamaño del borde en píxeles

Label_codigo = Label(text="Codigo..............: ",font=("arial"),fg="black", bg="light gray").place(x=24,y=30)
entrada_codigo = Entry(ventana)
entrada_codigo.place(x=140, y=28, width=100, height=20)

Label_fecha  = Label(text="Fecha...............: ",font=("vardana"),fg="black", bg="light gray").place(x=24,y=60)
Label_descripcion = Label(text="Descripción.....: ",font=("vardana"),fg="black", bg="light gray").place(x=24,y=90)
Label_varios = Label(text="Varios..............: ",font=("vardana"),fg="black", bg="light gray").place(x=24,y=120)

botonCerrar = Button(ventana, text="Cerrar", command=quit)
botonCerrar.place(x=400, y=185, width=80, height=40)

botonCerrar.focus_set()

ventana.mainloop()

Slds. Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel.

Está perfecto lo que hiciste y me alegra que hayas empezado con Tk. Efectivamente soy el autor de los artículos del blog. Smile

El método place() es el más sencillo de todos, pues simplemente indicamos las coordenadas y el tamaño de cada cosa que pongamos en la interfaz; pero tiene la contrapartida, justamente por eso, de que cuando el usuario redimensiona la ventana los controles se quedan exactamente en el mismo lugar y mantienen el mismo tamaño. No es "responsive", para usar un término del desarrollo web. Si no tenés inconvenientes con que eso ocurra, dale para adelante con place().

En cuanto a cómo hacer que una caja sea de solo lectura, podés indicar el argumento state="readonly" al momento de crearlo:

  1. entrada_codigo = Entry(ventana, state="readonly")


El problema es que esto también prohíbe que se le dé un texto a la caja a través del código. Así que en ese caso vas a tener que hacer algo como esto:

  1. # Deshabilitar el modo solo lectura.
  2. entrada_codigo.config(state="normal")
  3. # Insertar un texto.
  4. entrada_codigo.insert(0, "Texto no editable")
  5. # Volver a habilitar el modo solo lectura.
  6. entrada_codigo.config(state="readonly")


Más info. en este artículo: https://recursospython.com/guias-y-manua...y-tkinter/.

Por otro lado, deberías evitar crear un control y posicionarlo en la misma línea:

  1. Label_codigo = Label(text="Codigo..............: ",font=("arial"),fg="black", bg="light gray").place(x=24,y=30)


Ahí tu variable Label_codigo quedará como None, porque place() no tiene valor de retorno. Para no perder la referencia al control, mejor hacerlo en dos pasos:

  1. Label_codigo = Label(text="Codigo..............: ",font=("arial"),fg="black", bg="light gray")
  2. Label_codigo.place(x=24,y=30)


Por último, más adelante podrías usar los controles dentro del módulo ttk (ttk.Label, ttk.Entry, ttk.Button) para que tengan un estilo más agradable y moderno (si es que no te gusta lo vintage Big Grin ). Te dejo un artículo sobre el tema: https://recursospython.com/guias-y-manua...n-tkinter/. Digo "más adelante" porque la forma de darle estilos a esos controles es un poco diferente a la que estás usando (fg="black", bg="light gray", etc.).

Saludos
Responder
#3
Hola, Francisco ¿Cómo estás?, hola gente, buen día.-
Muy bueno, no parece tan complicado, por lo menos por el momento.-
Debo reconocer que las aplicaciones de escritorio como las bases de datos me “pierden” y
Justamente x la ansiedad que me causan no puedo dejar de preguntarte estas 2 cosas que no logro encontrar:
1): ¿Hay alguna manera de acceder a un botón presionando alguna de las letras del texto?
2): Leí que no se puede pero no lo creo, como hacer que al posicionar el mouse sobre un botón aparezca un texto de ayuda.- 

Muchas pero muchas gracias Francisco.
Slds. Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Hola, Daniel.

¡De nada! Se pueden hacer las dos cosas que comentás, pero mejor creá un nuevo tema para cada una de ellas, así es más organizado. Voy a estar unos días de vacaciones así que teneme paciencia. Smile

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)