Seite 1 von 1

Button-Klick Verhalten

Verfasst: Donnerstag 14. Januar 2016, 11:42
von Moneyman
Hallo Community,

Ich habe ein Programm, welches das Netzwerk durchsucht und dafür eine Oberfläche erstellt. Für die GUI habe ich eine eigene Klasse erstellt. Wenn der Scan durch Klicken auf den "Run"-Button gestartet wird, soll dieser deaktiviert werden:

Code: Alles auswählen

self.runB = Tkinter.Button(self.top, text='Run', command= self.runScan)
self.runB.grid(row=7, column=0, sticky=W)

def runScan(self):
        self.startB = Tkinter.Label(self.top, text="Scan running...", justify=RIGHT).grid(row=7, column=0)
        self.runB['state'] = 'disabled'
        startScan(self.eTarget.get(), self.runB, self.everyoneC.get(), self.hiddenSC.get(), self.eThread.get(), self.filePathTk)
        self.startB = Tkinter.Label(self.top, text="Scan complete!", justify=RIGHT).grid(row=7, column=0)
        self.runB['state'] = 'normal'
Leider werden die Zeilen vor dem Aufruf "startScan()" nicht ausgeführt?! Auch der Button befindet sich während der Scan-Zeit im gedrückten Zustand und das Programm reagiert nicht mehr. Muss ich die startScan() Methode in einen eigenen Thread auslagern? (Verwende weitere Threads für den Scanvorgang)

Vielen Dank schon mal für die Hilfe!

Re: Button-Klick Verhalten

Verfasst: Donnerstag 14. Januar 2016, 11:48
von BlackJack
@Moneyman: Die Zeilen werden ausgeführt aber Tk kann erst wieder etwas machen wenn `runScan()` wieder zur Tk-Hauptschleife zurück kehrt.

Bei jedem Aufruf neue `Label`-Exemplare zu erstellen sieht merkwürdig bis falsch aus. Zumal die auch noch die Schaltfläche verdrängen würden. `None` an `self.startB` zu binden macht keinen Sinn und was soll der Name bedeuten? Bei Deinen Namen sind zu viele komische Abkürzungen. Und die Schreibweise entspricht nicht dem Style Guide for Python Code.

Re: Button-Klick Verhalten

Verfasst: Donnerstag 14. Januar 2016, 12:03
von Moneyman
Hi BlackJack,

danke für die erklärende Antwort! Ich war ein wenig zu vorschnell mit dem Code. Du hast natürlich recht, dass ein erneuter Aufruf von Lable total sinnfrei ist :roll: Ebenso der Variablennamen^^ Deinen Link werde ich mir da einmal zu Gemüte führen.

Hast du denn einen Lösungsvorschlag?

Re: Button-Klick Verhalten

Verfasst: Donnerstag 14. Januar 2016, 12:37
von BlackJack
@Moneyman: Den Lösungsansatz hattest Du im Grunde schon selber: Länger laufende Vorgänge muss man in der GUI-Programmierung entweder in einen Thread (oder Prozess) auslagern, oder so programmieren, dass man das Problem in kleine, schnell ausgeführte Schritte zerlegt, die regelmässig von der GUI-Hauptschleife angestossen werden können und so die Hauptschleife nicht für längere Zeit blockieren.