# MyToDo mit Tkinter (Version Ende April 2002) from Tkinter import * from todo11 import * import sys class GUInotes(Tk, notiz): def __init__(self): # Tkinter und das Notiz-Modul werden mit vererbt Tk.__init__(self) notiz.__init__(self) # 1. Frame fuer ein Label und eine Eingabezeile self.feld0 = Frame(self) self.feld0.pack(side=TOP, fill=X) self. marke = Label(self.feld0, text = 'neuer Eintrag:') self.marke.pack(side = LEFT, fill = X) self.var = StringVar() # die Stringvariable fuer edit self.edit = Entry(self.feld0, bd = 3, textvariable=self.var) self.edit.pack(side=RIGHT, expand = 1, fill = X) self.edit.bind("", self.xrein) self.edit.bind("", self.xedit) # 2. Frame fuer die Buttons self.feld1 = Frame(self) self.feld1.pack(side=BOTTOM, fill = X) # der Button zum Eintrag entfernen self.kill = Button(self.feld1, text='Entfernen', command=self.weg) self.kill.pack(side=LEFT, expand = 1, fill = X) # der Button zum nach oben schieben self.hoch = Button(self.feld1, text = 'Heraufsetzen', command = self.hoch) self.hoch.pack(side=LEFT, expand = 1, fill = X) # der Button zum nach unten schieben self.ab = Button(self.feld1, text = 'Herabsetzen', command = self.runter) self.ab.pack(side=LEFT, expand = 1, fill = X) # der Button zum Eintrag bearbeiten self.bearbeit = Button(self.feld1, text = 'Bearbeiten', command = self.bearb) self.bearbeit.pack(side=LEFT, expand = 1, fill = X) # der Button fuer exit # self.bye = Button(self.feld1, text='Speichern/Beenden', command=self.beenden) # self.bye.pack(side=LEFT, expand = 1, fill = X) # 3. Frame fuer die Listbox self.feld2 = Frame(self) self.feld2.pack(side=TOP, expand = 1, fill=BOTH) self.feld3 = Frame(self) self.feld3.pack(side=TOP, fill = X) # Abfangen des Endebefehls aus der Fensterdekoration self.wm_protocol('WM_DELETE_WINDOW', self.quit) # die eigentliche Listbox self.fenster = Listbox(self.feld2, bg = "black", fg = "green", selectmode=SINGLE) self.fenster.pack(side = LEFT, expand = 1, fill=BOTH) self.fenster.bind("", self.pagedown) # PageDown loslassen self.fenster.bind("", self.pageup) # PageUp loslassen self.fenster.bind("", self.labelneu) # Linke Maustaste loslassen self.fenster.bind("", self.tastup) # Kursortaste hoch self.fenster.bind("", self.tastdown) # Kursortaste runter self.fenster.bind("", self.xraus) # Del-Taste # der Schiebebalken senkrecht self.bar = Scrollbar(self.feld2, orient = VERTICAL, command=self.fenster.yview) self.fenster.config(yscrollcommand = self.bar.set) self.bar.pack(side=RIGHT, fill=Y) self.bar1 = Scrollbar(self.feld3, orient = HORIZONTAL, command=self.fenster.xview) self.fenster.config(xscrollcommand = self.bar1.set) self.bar1.pack(side=BOTTOM, fill=X) # holt die gespeicherten Zeilen aus dem Modul todo.py self.listinbox() # nun den Focus auf die Listbox setzen, damit sie fuer Eingaben sensibel wird self.fenster.focus_set() # nur wenn in der Liste schon was drin ist: if len(self.liste) > 0: self.setzmarke(0) self.marked = 0 else: self.marked = None self.var.set('') self.neu = 0 # unterscheidet, ob klick in den edit-bereich einen Neueintrag # ausloesen soll, oder der Positionierung des Kursors beim # Bearbeiten des Texteintrags dient def beenden(self): self.rette() self.destroy() sys.exit(0) def setzmarke(self, eintrag): self.fenster.focus_set() # fuer den Fall, dass vorher Eingabemodus war self.fenster.selection_set(eintrag) # setzt den blauen Balken self.var.set(self.liste[eintrag]) self.marke.config(text = 'Markiert: ') def clearlist(self): self.fenster.delete(0, 'end') # Datenbestand neu reinziehen def listinbox(self): self.clearlist() if self.liste == []: pass else: for x in range(0, len(self.liste)): self.fenster.insert(END, self.liste[x]) def getpos(self): temp = self.fenster.curselection() if len(temp) > 0: return int(temp[0]) else: return 0 def rein(self): if self.marked == None and (self.var.get() != ''): self.hinzu(self.var.get(), wo = 'vorn') self.rette() self.listinbox() # der neue Eintrag steht oben und ist auch gleich markiert self.setzmarke(0) self.marked = 0 else: self.marke["text"] = 'neuer Eintrag:' self.var.set('') def hoch(self): if self.marked != 0: # hoeher gehts nicht! self.herauf(self.marked) self.rette() self.listinbox() if self.marked > 0: self.marked = self.marked - 1 self.fenster.selection_set(self.marked) self.fenster.activate(self.marked) self.fenster.see(self.marked) def runter(self): if self.marked != len(self.liste)-1: # tiefer gehts nicht! self.herunter(self.marked) self.rette() self.listinbox() if self.marked < len(self.liste)-1: self.marked = self.marked + 1 self.fenster.selection_set(self.marked) self.fenster.activate(self.marked) self.fenster.see(self.marked) def bearb(self): if (self.marked != None) and (self.neu == 0): self.neu = 1 self.raus(self.marked) self.listinbox() self.edit.focus_set() self.fenster.select_clear(0, END) self.marked = None def weg(self): # den markierten Eintrag entfernen if self.marked != None: self.raus(self.marked) self.rette() self.listinbox() if self.marked > len(self.liste)-1: self.marked = self.marked - 1 if self.marked > -1: self.setzmarke(self.marked) self.fenster.activate(self.marked) else: self.marked = None self.var.set('') self.marke["text"] = 'neuer Eintrag:' if self.marked != None: self.fenster.see(self.marked) def clearlist(self): self.fenster.delete(0, 'end') # Eventbehandlung beim Markieren (Maustaste loslassen) def labelneu(self, event): self.marked = self.getpos() self.setzmarke(self.marked) self.neu = 0 # Eventbehandlung fuer Kursortasten def tastup(self, event): if self.marked > 0: self.fenster.select_clear(0, END) self.marked = self.marked - 1 self.setzmarke(self.marked) def tastdown(self, event): if self.marked < len(self.liste)-1: self.fenster.select_clear(0, END) self.marked = self.marked + 1 self.setzmarke(self.marked) def pagedown(self, event): self.marked = len(self.liste)-1 self.fenster.select_clear(0, END) self.setzmarke(self.marked) self.fenster.activate(self.marked) # setzt auch die Untersteichung def pageup(self, event): self.marked = 0 self.fenster.select_clear(0, END) self.setzmarke(self.marked) # hier wird die Unterstreichung bereits vom Widget gesetzt # Eventbehandlung bei Enter nach Texteingabe (Hinzufunktion) def xrein(self, event): self.neu = 0 self.rein() self.rette() # Umschaltung auf Eingabe nach Mausklick auf das Editfeld def xedit(self, event): if self.neu == 0: self.neu = 1 self.marke["text"] = 'neuer Eintrag:' self.var.set('') self.fenster.select_clear(0, END) self.marked = None # Entfernen eines Eintrages mit der Del-Taste def xraus(self, event): self.weg() # die eigene Routine als Ersatz fuer Win_Delete # Achtung hier ohne den Parameter event!! def quit(self): self.beenden() my = GUInotes() my.title('Tk-ToDo 4.8') my.mainloop()