Pregunta

Estoy usando tkinter con Python para crear una interfaz de usuario para un programa que convierte los archivos de Excel a CSV.

I creado una etiqueta para actuar como una barra de estado, y establecer StatusBarText como VarCadena () como el textVariable. inputFileEntry y outputFileEntry son textvariables que contienen las rutas de entrada y salida de archivos.

def convertButtonClick():
    statusBarText.set('Converting...')

    if inputFileEntry.get() == '' or outputFileEntry.get() == '':
        statusBarText.set('Invalid Parameters.')
        return

    retcode = subprocess.('Program.exe' ,shell=true)

    if retcode == 0:
        statusBarText.set('Conversion Successful!')
    else:
        statusBarText.set('Conversion Failed!')

Esta función se llama cuando se hace clic en el botón de conversión, y todo funciona bien, excepto que la barra de estado no cambia nunca decir 'en la conversión de ...'.

El texto de la barra de estado se ve modificado de parámetros no válidos si la entrada o salida están vacíos, y cambiará al éxito o fracaso dependiendo del código de retorno. El problema es que nunca cambia a 'La conversión ...'

He copiado y pegado de esa línea exacta en las sentencias if y trabaja muy bien, pero por alguna razón, simplemente no cambia nunca antes de ejecutar el subproceso cuando su en la parte superior de la función. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Desde que estás haciendo todo esto en una sola llamada al método, la interfaz gráfica de usuario nunca tiene la oportunidad de actualizar antes de empezar el proceso de sub. Salida update_idletasks () llamar ...

desde http://infohost.nmt.edu/tcc/help /pubs/tkinter/universal.html

w.update_idletasks() Algunas tareas de actualización de la pantalla, como cambiar el tamaño y volver a dibujar los widgets, se denominan tareas de inactividad, ya que suelen aplazarse hasta que la aplicación ha terminado de eventos manipulación y ha vuelto al bucle principal para esperar nuevos acontecimientos.
    Si desea forzar la pantalla para actualizarse antes de las próximas Idles solicitud, llame al método w.update_idletasks () en cualquier tipo de artilugio.

Otros consejos

¿Cómo estás creando tu etiqueta? Tengo esta configuración de prueba pequeña:

from Tkinter import *
class LabelTest:

    def __init__(self, master):
        self.test = StringVar()

        self.button = Button(master, text="Change Label", command=self.change)
        self.button.grid(row=0, column=0, sticky=W)

        self.test.set("spam")
        self.testlabel = Label(master, textvariable = self.test).grid(row = 0,column = 1)
    def change(self):

        self.test.set("eggs")



root = Tk()
root.title("Label tester")
calc = LabelTest(root)

root.mainloop()

Y funciona. ¿Usted asegúrese de usar "textVariable = StatusBarText" en lugar de "text = StatusBarText.get ()"?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top