Thread Tk: Programm im Programm (9 answers)
Opened by Kean at 2011-08-16 15:26

GUIfreund
 2011-08-22 10:55
#151729 #151729
User since
2011-08-08
559 articles
BenutzerIn
[default_avatar]
Hallo Kean,

wenn ich dich richtig verstehe, erzeugst du mehrere Toplevel-Widgets, und bei einigen davon willst du auf deren Ende warten. In diesen Fällen wäre vielleicht ein DialogBox-Widget geeigneter.

Allerdings habe ich mich über kein Widget so geärgert wie über DialogBox. Sowohl das Design als auch die Doku sind recht mäßig. Hier 2 Tipps für die Programmierung des DialogBox-Widgets:

1. Setze -default_button immer auf einen nicht existierenden Button. Damit verzichtest du auf etwas Bequemlichkeit, ersparst dir aber eine Menge Ärger. Grund: Wenn ein Button den Fokus hat und du drückst die Enter-Taste, wird nicht dieser Button aktiviert, sondern der Defaultbutton. Wer denkt schon immer daran, dass er hier die Leertaste hätte drücken müssen? Schlimmer noch: wenn du keinen Defaultbutton vorgibst, ist der 1. Button der Default. Das ungewollte Resultat kann verheerend sein. Deshalb immer einen nicht existierenden Button vorgeben.

2. Um ein Widget einzufügen, auf das du dich später beziehen musst, verwende so etwas wie my $irgend = $db->add(.... Damit hast du den üblichen direkten Zugriff auf das Widget und sparst dir den Umweg über $db->Subwidget(...).

Lass dich von meinen Worten nicht abschrecken. Ich verwende DialogBox öfters. Es ist das einzige flexible Dialogwidget.

Quote
Das führt dazu, dass der Nutzer nochmal klickt und das Programm zweimal ausführt.

Der Button, der hier angeklickt wurde, kann sich als Erstes selbst sperren. Nach Ende des Programms wird er wieder freigegeben. Alternativ kannst du mit $widget->Busy(...) und $widget->Unbusy(...) den Mauszeiger temporär zu einer Sanduhr o. ä. machen. Dabei wird zugleich der Button gesperrt. (Ohne Gewähr, ich hab's noch nie benutzt.)

HTH.

GUIfreund
Gruß
GUIfreund

View full thread Tk: Programm im Programm