Seite 1 von 1

Oberfläche in Klasse beenden

Verfasst: Montag 14. Juli 2003, 22:07
von alpha
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]

Verfasst: Dienstag 15. Juli 2003, 09:08
von Milan
(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.