Frage zu tkSimpleDialog.Dialog

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

Mittwoch 3. September 2003, 23:06

Hallo zusammen!
Schon wieder eine Frage zu Tkinter: Ich möchte einen Dialog erzeugen, dem ich irgendeinen Parameter übergebe, der den Inhalt der Dialogbox steuert (z.B. den Text eines Labels oder sowas). Bin ich da mit einem von der tkSimpleDialog.Dialog - Klasse abgeleiteten Dialog richtig?
Sowas wie ...

Code: Alles auswählen

class askMeForSomething(tkSimpleDialog.Dialog):
		def body(self, master, someParameter):
				Label(master, text = str(someParameter)).grid(row = 0, colum = 0)
				(...)
... geht nämlich nicht.

Danke wie immer für jede Anregung,

Jochen
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

Donnerstag 4. September 2003, 08:35

Code: Alles auswählen

import tkMessageBox 


def showMessage(titel, inhalt):
    tkMessageBox.showinfo(titel,inhalt)


#Testaufruf
showMessage("Hallo", "Nur ein Test")
Also das wäre wahrscheinlich die simpelste Lösung. Das geht natürlich auch objektorientiert, aber ableiten musst du da eigentlich nix, es sei denn du willst die Klasse tkMessageBox erweitern.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Donnerstag 4. September 2003, 08:46

Hallo!
jocsch hat geschrieben:... geht nämlich nicht.
body() rufst Du selbst nie auf, sondern das macht der Konstruktor der Dialog-Klasse. Was vielleicht irretiert, ist dass bereits der Aufruf des Konstruktors nicht nur die Instanz erzeugt, sondern auch gleich den Dialog erscheinen lässt.
Lösung: Du überschreibt den Konstruktor mit einer eigenen Version mit zusätzlichem Parameter und speicherst den Parameter in einer Membervariablen:

Code: Alles auswählen

class askMeForSomething(tkSimpleDialog.Dialog):
      def __init__(self,master,someParameter):
            self.someParameter = someParameter
            Dialog.__init__(self,master)
      
      def body(self, master):
            Label(master, text = str(self.someParameter)).grid(row = 0, colum = 0)
            (...) 
# Aufruf:
myDialog = askMeForSomething(root,"der Paramter")
hth
Jan
Antworten