Dialog in Tkinter implementieren

Fragen zu Tkinter.
Antworten
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Sonntag 18. Mai 2003, 22:52

Hallo an alle!
Ich möchte eine Klasse implementieren, die nach dem Stil von z.B. filename=TkFileDialog.asksaveasfilename() etwas zurückgibt.
Also etwas wie:

class MyDialog:
....def __init__(self, parent):
........#hier werden widgets gezeichnet und angeordnet etc...

....def OkGedrueckt(self):
........ergebnis = EntryWidgetForExample.get(...)
........return ergebnis

a = MyDialog(TkRoot) liefert dann natürlich das Toplevel-Widget, Ich will aber danach (wie oben) in a das ergebnis haben.

Gibts da sowas wie ein Schema 'f'?

Für jeden Hinweis dankbar und viele Grüsse, jocsch
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Montag 19. Mai 2003, 08:53

Hallo!
jocsch hat geschrieben:Gibts da sowas wie ein Schema 'f'?
Das übliche Vorgehen wäre, das Ergebnis in eine Membervariable zu packen.

Code: Alles auswählen

class MyDialog:
	def __init__(self, parent):
		#hier werden widgets gezeichnet und angeordnet etc...
	def OkGedrueckt(self):
		self.ergebnis = EntryWidgetForExample.get(...)

mydialog = MyDialog(TkRoot)
a = mydialog.ergebnis
Wenn Du auf die Form a = Foo(bar) bestehst, dann am besten alles in einer Funktion kapseln:

Code: Alles auswählen

def callMyDialog(parent):
	mydialog = MyDialog(parent)
	return mydialog.ergebnis	
a = callMyDialog(TkRoot)
Ansonsten, das Modul tkSimpleDialog (bei mir unter Python22\Lib\lib-tk\) bietet einfache Abfragedialoge (askinteger(),askfloat(),askstring()) und eine Dialog-Klasse, die sich sehr gut als Vorlage für eigene Dialoge eignet. Unter http://python.sandtner.net/viewtopic.php?t=442 war das kurz Thema.
Jan
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Montag 19. Mai 2003, 15:21

Nochmal Hallo!
Die Idee kam mir auch schon, aber so enthält self.ergebnis immer das, mit dem es in __init__(self) initialisiert wurde. Ich muss das Programm also irgendwie dazu bringen, zwischen mydialog=MyDialog(Tkroot) und a = mydialog.ergebnis quasi auf das drücken von 'Ok' (resp. 'apply') zu 'warten' - da stehe ich eine bisschen auf dem Schlauch.

Igendwelche Ideen?

Danke, jocsch
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Montag 19. Mai 2003, 16:24

Hallo!
Achso, ich nahm an, das Anzeigen und Beenden des Dialogs würde schon funkionieren und es ginge nur noch um die Rückgabe des Wertes.
Ich will gar nicht viel erklären. Guck Dir stattdessen mal [1] an und frag' dann nochmal bei Unklarheiten.
Jan
[1] http://effbot.org/zone/tkinter-dialog-windows.htm
allg. Einstiegspunkt: http://effbot.org/zone/tkinter-toc.htm
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Montag 19. Mai 2003, 16:44

Hallo Zurück!
Das funzt einwandfrei - am einfachsten scheint es mir, das ganze von tkSimpleDialog.Dialog abzuleiten, ist mit am wenigsten Tipperei verbunden !!!

Vielen Dank
Antworten