Tkinter – Widget de entrada de solo lectura

Python tiene varios marcos para desarrollar aplicaciones GUI como PyQT, Kivy, Jython, WxPython, PyGUI y Tkinter. El módulo Python tkinter ofrece una variedad de opciones para desarrollar aplicaciones basadas en GUI. Tkinter es de código abierto y está disponible bajo licencia de Python. Tkinter proporciona la forma más sencilla y rápida de desarrollar una aplicación GUI. Tkinter admite diferentes widgets, de los cuales el widget de entrada se usa para aceptar la entrada del usuario. Sin embargo, hay casos en los que un determinado texto debe estar en formato de solo lectura para evitar alteraciones por parte del usuario. Esto se puede lograr mediante el widget de entrada y las diversas opciones disponibles en el widget de entrada.

En este artículo veremos el uso de las variables Tkinter. Las variables de Python se pueden usar en los widgets de Tkinter, pero no brindan la flexibilidad que brindan las variables de Tkinter. Las variables de Tkinter tienen una característica única llamada ‘seguimiento’ que se puede usar para rastrear los cambios realizados en las variables asociadas. Esto es útil para realizar un seguimiento de los cambios accidentales realizados en una variable mientras se trabaja. El siguiente código demuestra la creación de un widget de entrada de solo lectura usando Tkinter.

  1. Importar módulo tkinter
    import tkinter
  2. Importar submódulo tkinter
    from tkinter import *
  3. Crear el widget principal
    root = Tk()

    Sintaxis: Tk(screenName=Ninguno, baseName=Ninguno, className=’Tk’, useTk=1)
    Parámetro: En este ejemplo, la clase Tk se instancia sin argumentos.
    Explicación:
    este método crea una ventana principal en blanco con botones para cerrar, maximizar y minimizar en la parte superior.

  4. Crear etiquetas para los widgets de entrada y colocar las etiquetas en el widget principal
    L1 = Label(root, text="User Name")
    L1.grid(row=0, column=0)
    L2 = Label(root, text="Password")
    L2.grid(row=1, column=0)

    Sintaxis: Etiqueta(maestro, **opciones)
    Parámetro:

    • maestro: la ventana principal (raíz) actúa como el maestro.
    • opciones: Las opciones admitidas por el método Label() son texto, ancla, bg, mapa de bits, bd, cursor, fuente, fg, alto, ancho, imagen, justificar, relieve, padx, pady, textvariable, subrayado y wraplength. Aquí, la opción de texto se usa para mostrar el nombre del widget de entrada.

    Explicación:
    el widget de etiqueta se usa para mostrar texto o imágenes correspondientes a un widget. El texto que se muestra en la pantalla se puede formatear aún más usando las otras opciones admitidas por el widget de etiqueta.

    Sintaxis: grid(**opciones)
    Parámetro:

    • Opciones: las opciones disponibles en el método grid() que se pueden usar para modificar la posición de un widget en el widget principal son fila, fila, columna, columna, padx, pady, ipadx, ipady y sticky.

    Explicación:
    el método grid() divide la ventana principal en filas y columnas como una tabla de dos dimensiones. Aquí el método grid() especifica la posición del widget de etiqueta en la ventana principal.

  5. Creación de una variable Tkinter para el widget de entrada
    mystr = StringVar()

    Sintaxis: StringVar()
    Parámetro: El constructor no acepta argumentos. Para establecer el valor, se utiliza el método set().
    Explicación:
    StringVar es una de las clases de variables incorporadas en Tkinter. El valor predeterminado de StringVar() es una string vacía «» .

  6. Establecer el valor de la string
    mystr.set('username@xyz.com')

    Sintaxis: set(string)
    Parámetro:

    • string: representa el texto que se asociará con el widget (aquí widget de ‘entrada’)

    Explicación:
    dado que el constructor de la clase StringVar no acepta ningún argumento durante la creación del objeto, el método set() se usa para cambiar el valor de la variable de la clase StringVar. Se llama a este método cada vez que es necesario cambiar el valor de la string y el valor modificado se refleja automáticamente en el widget asociado.

  7. Crear widget de entrada

    entrada = Entrada(variable de texto=mystr, estado=DESHABILITADO).grid(fila=0, columna=1, padx=10, pady=10)
    mystr.set(‘username@xyz.com’)
    passwd = Entrada().grid (fila=1, columna=1, padx=10, pady=10)

    Sintaxis: Entrada(maestro, **opciones)
    Parámetro:

    • maestro: representa el widget principal (aquí raíz).
    • opciones: las opciones disponibles en el widget de entrada son bg, bd, comando, cursor, fuente, exportar selección, justificar, relieve, resaltar color, fg, seleccionar fondo, seleccionar primer plano, seleccionar ancho de borde, mostrar, comando de desplazamiento x, estado, variable de texto y ancho.

    Explicación:
    este método crea un widget de entrada en el widget principal. La ‘entrada’ del widget Entry está en estado deshabilitado, lo que implica que está en modo de solo lectura y el usuario no puede cambiarlo. Sin embargo, el widget de entrada ‘contraseña’ está en estado normal y acepta entradas del usuario que se pueden cambiar si es necesario. El método grid() coloca el widget de entrada en el widget principal.

  8. Ejecutar la aplicación
    mainloop()

    Sintaxis: mainloop()
    Explicación:
    Mainloop() básicamente actúa como un bucle infinito. Se utiliza para ejecutar una aplicación.

Programa Completo

import tkinter
from tkinter import *
  
  
root = Tk()
  
L1 = Label(root, text="User Name")
L1.grid(row=0,column=0)
L2 = Label(root, text="Password")
L2.grid(row=1,column=0)
  
mystr = StringVar()
mystr.set('username@xyz.com')
  
entry = Entry(textvariable=mystr, 
              state=DISABLED).grid(row=0,
                                   column=1,
                                   padx=10,
                                   pady=10)
  
passwd = Entry().grid(row=1,column=1,
                      padx=10,pady=10)
mainloop()

Producción
python-tkinter-read-only-widget

Publicación traducida automáticamente

Artículo escrito por Shreyasi_Chakraborty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *