# MyToDo mit Tkinter (Version Februar 2002) from Tkinter import * from todo10 import * import sys class GUInotes(Tk, notiz): def __init__(self): # Tkinter und das Notiz-Modul weren mit vererbt Tk.__init__(self) notiz.__init__(self) # 1. Frame für 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 ) self.var = StringVar() # die Stringvariable für edit self.edit = Entry(self.feld0, bd = 3, textvariable=self.var) self.edit.pack(side=RIGHT) self.edit.bind("", self.xrein) self.edit.bind("", self.xedit) # 2. Frame für die Buttons self.feld1 = Frame(self) self.feld1.pack(side=BOTTOM) # der Button zum nach oben schieben self.hoch = Button(self.feld1, text = 'Heraufsetzen', command = self.hoch) self.hoch.pack(side=LEFT) # der Button zum Eintrag entfernen self.kill = Button(self.feld1, text='Entfernen', command=self.weg) self.kill.pack(side=LEFT) # der Button für exit self.bye = Button(self.feld1, text='Beenden', command=self.beenden) self.bye.pack(side=LEFT) # 3. Frame für die Listbox self.feld2 = Frame(self) self.feld2.pack(side=BOTTOM) # die eigentliche Listbox self.fenster = Listbox(self.feld2, width=30, bg = "black", fg = "green", selectmode=SINGLE) self.fenster.pack(side = LEFT) 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") # holt die gespeicherten Zeilen aus dem Modul todo.py self.listinbox() # nun den Focus auf die Listbox setzen, damit sie für 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('') def beenden(self): self.rette() self.destroy() sys.exit(0) def setzmarke(self, eintrag): self.fenster.focus_set() # für 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') 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.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: # höher gehts nicht :-) self.herauf(self.marked) 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) else: self.marked = None self.var.set('') self.marke["text"] = 'neuer Eintrag:' def weg(self): # den markierten Eintrag entfernen if self.marked != None: self.raus(self.marked) 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:' 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) # Eventbehandlung für 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.rein() # Umschaltung auf Eingabe nach Mausklick auf das Editfeld def xedit(self, event): 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() my = GUInotes() my.title('Tk-ToDo 4.3') my.mainloop()