2011-06-07 9 views
5

una pregunta simple (no tan simple para un tkinter newby como yo): Estoy construyendo una GUI y quiero tener dos botones de radio controlando el estado (habilitado o deshabilitado) de un widget de Entrada, en el que el usuario ingresará los datos. Cuando se presiona el primer botón de opción, deseo que la Entrada se deshabilite; cuando se presiona el segundo botón de opción, deseo que la Entrada se deshabilite.Python tkinter Interruptor de estado de widget de entrada a través de botones de radio

Aquí está mi código:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 

#callbacks 
def enableEntry(): 
    entry.configure(state=ENABLED) 
    entry.update() 

def disableEntry(): 
    entry.configure(state=DISABLED) 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

Mi idea es invocar las devoluciones de llamada adecuadas cuando se pulsa cada botón de radio. Pero no estoy muy seguro de que realmente suceda con el código que escribí, porque cuando selecciono las radios, el estado de la Entrada no cambia.

¿Dónde me equivoco?

Respuesta

5

Tiene algunas cosas malas con su programa, pero la estructura general es correcta.

  1. usted no está llamando root.mainloop(). Esto es necesario para que el bucle de evento sirva eventos como clics de botones, etc.
  2. usa ENABLED y DISABLED pero no los define ni los importa en ningún lado. Personalmente prefiero usar los valores de cadena "normal" y "disabled".
  3. no está embalando su principal frame widget de

Cuando arreglo esas tres cosas que su código funciona bien. Aquí está el código de trabajo:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 
frame.pack() 

#callbacks 
def enableEntry(): 
    entry.configure(state="normal") 
    entry.update() 

def disableEntry(): 
    entry.configure(state="disabled") 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

root.mainloop() 
+0

Bryan, se disculpa: Olvidé para insertar el 'root.mainloop()' en mi extracto de código (error tipográfico) – csparpa

+0

Ok, el código funciona bien ahora. ¡Gracias! – csparpa

Cuestiones relacionadas