Oberfläche in Klasse beenden

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

Oberfläche in Klasse beenden

Beitragvon alpha » 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

Beitragvon Milan » 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder