Frage

Ich verwende tkinter mit Python eine Benutzeroberfläche für ein Programm zu erstellen, die Excel-Dateien in CSV konvertiert.

habe ich ein Label als Statusleiste zu handeln und setzen StatusBarText als StringVar () als textvariable. inputFileEntry und outputFileEntry textvariables sind, die die Eingabe- und Ausgabedateipfade enthalten.

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!')

Diese Funktion aufgerufen wird, wenn Sie auf die Schaltfläche Konvertieren klicken, und alles funktioniert AUSSER fein, dass die Statusleiste ändert sich nie zu sagen: ‚Konvertieren ...‘.

In der Statusleiste Text wird ungültiger Parameter erhält geändert, wenn entweder der Eingang oder Ausgang leer ist, und es wird zum Erfolg oder Misserfolg ändern, je nach dem Return-Code. Das Problem ist, es ändert sich nie auf ‚Konvertieren ...‘

Ich habe kopiert und eingefügt, dass ein exakte Linie in die if-Anweisungen und es funktioniert gut, aber aus irgendeinem Grunde ändert er einfach nie vor der Subprozess läuft, wenn sein an der Spitze der Funktion. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Da Sie all dies in einem einzigen Methodenaufruf tun, wird die GUI nie eine Chance zu aktualisieren, bevor Sie Ihren Teilprozess beginnen. Check out update_idletasks () aufrufen ...

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

w.update_idletasks() Einige Aufgaben bei der Aktualisierung der Anzeige, wie Ändern der Größe und Nachziehen Widgets, werden im Leerlauf Aufgaben genannt, weil sie in der Regel verschoben werden, bis die Anwendung beendet hat die Behandlung von Ereignissen und hat zurück zur Hauptschleife zu warten, für neue Ereignisse gegangen.
    Wenn Sie die Anzeige erzwingen wollen, bevor die Anwendung nächste idles aktualisiert werden, rufen Sie die w.update_idletasks () -Methode auf jedem Widget.

Andere Tipps

Wie erstellen Sie Ihr Label? Ich habe diesen kleinen Testaufbau:

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()

Und es funktioniert. Haben Sie stellen Sie sicher, "textvariable = StatusBarText" anstelle von "text = StatusBarText.get ()" zu benutzen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top