Button bleibt gedrückt

Fragen zu Tkinter.
Antworten
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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.
AllesMeins
User
Beiträge: 63
Registriert: Donnerstag 20. November 2003, 13:45
Wohnort: Frankfurt/M.

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...
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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
Take it easy Mates!
Benutzeravatar
strogon14
User
Beiträge: 58
Registriert: Sonntag 23. Februar 2003, 19:34
Wohnort: Köln
Kontaktdaten:

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
Antworten