Seite 1 von 1

Button bleibt gedrückt

Verfasst: Sonntag 23. November 2003, 18:23
von AllesMeins
Hiho,

ich habe es ja nun endlich geschafft meine erste Mini-GUI zu erzeugen. Nun habe ich an einen Button eine Funktion gehängt, die ausgeführt wird, wenn der Button gedrückt wird. Nun bleibt der Button aber eingedrückt, solange die Funktion läuft. Und wenn es eine Funktion ist, die etwas länger braucht, dann sieht das doch sehr unschön aus. Wie kann man das verhindern?

Verfasst: Sonntag 23. November 2003, 18:57
von Dookie
Hi AllesMeins,

versuchs mal mit update_idletasks() oder mit update() am anfang Deiner Funktion. Dies gibt Tkinter die Möglichkeit den Button neu zu zeichnen.


Gruß

Dookie

Verfasst: Sonntag 23. November 2003, 19:04
von Milan
Du kannst auch, wenn es sich anbietet und die Funktion nur im Hintergrund laufen soll, einfach einen Thread starten lassen. Das wäre dann eine Alternative, wenn man z.B. ein Mailprogramm schreibt, und die Mails ducrh Anhang etc sehr lang sind und der Versand dann dauern kann. Das kannst du dann mit

Code: Alles auswählen

import thread
thread.start_new_thread(auszufuehrende_function, argumente, keywort_argumente)
machen.

Verfasst: Sonntag 23. November 2003, 19:08
von AllesMeins
Es ist wie verhext. Alle Probleme die ich habe laufen immer wieder auf den Kram mit den Klassen hinaus.
Das mit dem update() funktioniert zwar gut, nur ist die erwähnte Funktion in einer anderen Klasse in einer anderen Datei.
Deswegen hab ich beschlossen jetzt den Kram mit den Klassen mal richtig zu lernen. Kennt irgendwer hier ein möglichst simples Tutorial in dem das alles mal richtig und ausführlich erklärt wird? Es ist ja kein Zustand hier jedes mal fragen zu müssen wenn ich in die Nähe von Klassen komme...

Verfasst: Sonntag 23. November 2003, 21:22
von Voges
Hallo!
AllesMeins hat geschrieben:Es ist wie verhext. Alle Probleme die ich habe laufen immer wieder auf den Kram mit den Klassen hinaus.
Ja, man kommt zwar weit ohne OOP, aber spätestens bei GUI-Geschichten ist dann meist Schluss.
AllesMeins hat geschrieben:Das mit dem update() funktioniert zwar gut, nur ist die erwähnte Funktion in einer anderen Klasse in einer anderen Datei.
Du könntest eine Hilfsfunktion sozusagen als "Zwischenstation" dort plazieren, wo der Button-Code ist. Der Button ruft eben diese Funktion auf und die Funktion ihrerseits dann update_idletasks() und danach die eigentlich gewünschte Funktion im anderen Modul.
AllesMeins hat geschrieben:Kennt irgendwer hier ein möglichst simples Tutorial in dem das alles mal richtig und ausführlich erklärt wird?
Simple Tutorien beschäftigen sich nicht mit Klassen ;-). Nein, es gibt natürlich etliche Tutorien zu Thema, aber ich fürchte, man muss sich einige angucken, um das für einen selbst beste zu finden. Du kannst ja mal nach 'python' in Kombination mit 'tutorium' oder 'tutorial' googeln.

Jan

Verfasst: Montag 24. November 2003, 21:49
von wuf
Hallo AllesMein

Probier doch einmal Deine Funktion mit
dem release-Event des Buttons aufzurufen.

Normalerweise wird ein Button mit der Maustaste
nur kurz angeklickt. So ist sichergestell das die
zeitraubende Funktion erst mit dem loslassen
des Buttons abgefeuert wird. :D

Gruss wuf

OO-Tutorial

Verfasst: Dienstag 25. November 2003, 17:08
von strogon14
AllesMeins hat geschrieben:Kennt irgendwer hier ein möglichst simples Tutorial in dem das alles mal richtig und ausführlich erklärt wird?
Wie wär's denn mit dem entsprechenden Kapitel "Object Oriented Programming" aus Learning to Program von Alan Gauld (http://www.freenetpages.co.uk/hp/alan.g ... tintro.htm)? Davon gibt es auch eine deutsche Übersetzung von Bruno Schäfer (http://www.freenetpages.co.uk/hp/alan.g ... /index.htm).

Chris