Oberfläche in Klasse beenden

Fragen zu Tkinter.
Antworten
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

Montag 14. Juli 2003, 22:07

Hallo zusammen,

ich habe folgendes Problem.
Ich erzeuge in einem Konstruktor ein Fenster mit Eingabefeldern.

Code: Alles auswählen

	
	def __init__(self):
		cf = Tk(className="jus Configurator")
		CheckState = StringVar(cf)
		LabelCDPath = Label(cf, text = "CD Path:")
		LabelCDPath.grid(row=0, column=0)

		# Eingabefeld (Pfad)
		global TextCDPath
		TextCDPath = Entry(cf, width = 80)
		TextCDPath.grid(row=0, column=1)

		# Label (LabelDatabaseName)
		global LabelDatabaseName
		LabelDatabaseName = Label(cf, text = "Database name:")
		LabelDatabaseName.grid(row=1, column=0)

		# Eingabefeld (DatabaseName)
		global TextDatabaseName
		TextDatabaseName = Entry(cf, width=80)
		TextDatabaseName.grid(row=1, column=1)

		# Checkbutton (CheckType)
		global CheckType
		CheckType = Checkbutton(cf, onvalue="On", offvalue="Off",
								variable=CheckState,
								text = "Log only this filetypes")
		CheckType.grid(row=2,column=0)
		CheckType.deselect()

		# Eingabefeld (TextFileType)
		global TextFileType
		TextFileType = Entry(cf, width = 80)
		TextFileType.grid(row=2, column=1)

		# Button (ButtonExit)
		ButtonExit = Button(cf, text = "save config", command = self._saveall)
		ButtonExit.grid(row=3, column=1, sticky="se")

		#try:
		fz = open("jus.ini")
		self.cdpath = fz.readline()
		self.cdpath = self.cdpath[0:len(self.cdpath)-1]
		TextCDPath.insert("end", self.cdpath)
		self.dbname = fz.readline()
		self.dbname = self.dbname[0:len(self.dbname)-1]
		TextDatabaseName.insert("end", self.dbname)
		self.filetypes = fz.readline()
		self.filetypes = self.filetypes[0:len(self.filetypes)-1]
		TextFileType.insert("end", self.filetypes)
		fz.close()
		#except:
		#tkMessageBox.showerror("File-Error", "Could not read ini-file!")
		cf.mainloop()

Mit einem Button mochte ich das Fenster schliesen, aber die Klasse
dabei nicht zerstören, da ich auf die Daten in den Eingabefeldern später noch zugreifen
will. Diese werden zu diesem Zweck in Properties (Eigenschaften) der Klasse gespeichert.
Kann mir jemand sagen wie ich das realisieren kann? Ich habe soviel schon herausgefunden:
Es mus wohl mit dem "Beenden"-Button die gleiche Funktion aufgerufen werden, wie wenn
auf das Kreuz rechts oben im Fenster geklickt wird. Dann wird die Oberfläche beendet, aber die Klasse existiert weiter.

Danke schon mal im Vorraus.[/code]
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Dienstag 15. Juli 2003, 09:08

(Gehöhrt eigentlich nach GUI Toolkits). Damit du das Fenster später zerstören kannst, musst du es selbst erst einmal in der Klasse abspeichern:

Code: Alles auswählen

  def __init__(self):
    self.cf = Tk(className="jus Configurator")
Dann musst du natürlich auch immer als Master self.cf angeben...

Wichtig ist aber, dass du noch auf das Fentser zugreifen kannst (cf) und später dann einfach self.cf.destroy() rufen kannst.
Antworten