Übersichtlicher als der weiter unten angegebene Quelltext ist zunächst die Dokumentation von Tool1! (Klick)
Führt man tool1.py aus (im Normallfall wird es importiert), so wird ein kleines Testprogramm ausgeführt:
Und hier der Quelltext incl. Testprogramm:
#! /usr/bin/python import Tkinter import os from Tkconstants import * class EingabeZeile: """ /* Widget-Kombination aus Label und Entry: /* links ÜBER der Eingabezeile steht die Beschriftung """ def __init__(self,oWindow, Beschriftung, Laenge, Aktion): """ /* oWindow: Tk: Objekt Elternfenster /* Beschriftung: String: Text für Label /* Laenge: Int: maximale Entry-Länge (in Zeichen) /* Aktion: Referenz auf Ereignismethode (Returntaste) """ oLabel=Tkinter.Label(oWindow, text=Beschriftung) oLabel.pack(padx=5, pady=5, anchor=W) self.oEingabe=Tkinter.Entry(oWindow, width=Laenge, font="*-140-*") self.oEingabe.pack(fill=X, padx=5, pady=5) self.oEingabe.bind("<Return>",Aktion) def getZeile(self): """ /* liefert den Eingabe-String zurück """ try: self.oEingabe.selection_range(0,"end") return self.oEingabe.selection_get() except: return "" def setZeile(self,Inhalt): """ /* Inhalt: string: Textvorgabe für das Eingabefenster """ self.oEingabe.delete(0,"end") self.oEingabe.insert(0,Inhalt) class DreiKnoepfe: """ /* Widget-Kombination dreier Buttons, die am unteren Rand /* des Elternfensters nebeneinander liegen, der erste /* Knopf ist hervorgehoben """ def __init__(self,oWindow,Text1, Text2, Text3, A1, A2, A3): """ /* oWindow: Tk: Objekt Elternfenster /* Text1, Text2, Text3: String: Beschriftung der Knöpfe /* A1, A2, A3: Referenz auf die Ereignismethoden (linke Maus-Taste) """ oRahmen=Tkinter.Frame(oWindow, relief=SUNKEN, bd=2) oRahmen.pack(side=LEFT, padx=5, pady=9, anchor=S) oKnopf=Tkinter.Button(oRahmen,text=Text1, command=A1) oKnopf.pack(padx=2, pady=2) # Knöpfe 2 und 3: oKnopf=Tkinter.Button(oWindow, text=Text3, command=A3) oKnopf.pack(side=RIGHT, padx=5, pady=12, anchor=S) oKnopf=Tkinter.Button(oWindow, text=Text2, command=A2) oKnopf.pack(side=RIGHT, padx=20, pady=12, anchor=S) class Listbox_mit_Schiebern: """ /* Widget-Kombination aus Listbox und vertikalem /* sowie horizontalem Scrollbar. Links oberhalb /* der Listbox ist eine Beschriftung angebracht """ def __init__(self,oWindow,Beschriftung, aktion1, aktion2): """ /* oWindow: Tk: Objekt Elternfenster /* Beschriftung String: Beschriftung /* aktion1 Referenz auf Methode bei Einfachklick /* aktion2 Referenz auf Methode bei Doppelklick """ oLabel=Tkinter.Label(oWindow, text=Beschriftung) oLabel.pack(padx=5, pady=2, anchor=W) oHoriscroll=Tkinter.Scrollbar(oWindow, orient=HORIZONTAL) oHoriscroll.pack(fill=X,side=BOTTOM) self.oListen_box=Tkinter.Listbox(oWindow) self.oListen_box.pack(expand=1,side="left",fill=BOTH) oVertikalscroll=Tkinter.Scrollbar(oWindow, orient=VERTICAL) oVertikalscroll.pack(side="right", fill=Y) # Kopplung Scrollbars an Liste und umgekehrt oHoriscroll.config(command=self.oListen_box.xview) oVertikalscroll.config(command=self.oListen_box.yview) self.oListen_box.config(xscrollcommand=oHoriscroll.set, \ yscrollcommand=oVertikalscroll.set) self.oListen_box.bind("<ButtonRelease-1>", aktion1) self.oListen_box.bind("<Double-Button-1>", aktion2) def liste_uebergeben(self,liste): """ /* liste : Liste mit Dateinamen (Strings), die in Listbox angezeigt /* werden soll. """ liste.sort() self.oListen_box.delete(0,"end") for name in liste: self.oListen_box.insert("end",name) def get_Auswahl(self): """ /* liste : Inhalt einer Zeile der Listbox, die mit der Maus /* selektiert wurde """ return self.oListen_box.selection_get() class Listbox_mit_Schiebern2(Listbox_mit_Schiebern): """ /* Widget-Kombination aus Listbox und vertikalem /* sowie horizontalem Scrollbar. Links oberhalb /* der Listbox ist eine Beschriftung angebracht /* Variante der Listbox_mit_Schiebern (Erbschaft)!!! /* Im Gegensatz zur ersten Version hat diese Listbox ein /* Gedächtnis und merkt sich den selektierten Eintrag, um /* ihn nach der Aktion noch als markiert anzuzeigen. Diese /* Eigenschaft ist im linken Fenster überflüssig und störend, /* falls nach dem cd ein Verzeichnis mit gleichem Namen vorkommt. """ def __init__(self,oWindow,Beschriftung, aktion1, aktion2): """ /* oWindow: Tk: Objekt Elternfenster /* Beschriftung String: Beschriftung /* aktion1 Referenz auf Methode bei Einfachklick /* aktion2 Referenz auf Methode bei Doppelklick """ oLabel=Tkinter.Label(oWindow, text=Beschriftung) Listbox_mit_Schiebern.__init__(self,oWindow,Beschriftung,aktion1,aktion2) self.Gedaechtnis="" def liste_uebergeben(self,liste): """ /* liste : Liste mit Dateinamen (Strings), die angezeigt werden /* soll. Gemerkter Dateiname wird in Liste gesucht und /* Eintrag mit entsprechendem Index markiert. (Zuvor wird /* der Index bestimmt.) """ liste.sort() self.oListen_box.delete(0,"end") counter=-1 index1=counter for name in liste: self.oListen_box.insert("end",name) counter=counter+1 if name==self.Gedaechtnis: index1=counter if (index1 > -1): self.oListen_box.select_set(index1) self.oListen_box.see(index1) def get_Auswahl(self): """ /* Markierter Dateiname wird gemerkt und zurückgegeben """ self.Gedaechtnis=self.oListen_box.selection_get() return self.Gedaechtnis if __name__ == "__main__": # Testprogramm - wird nur beim Aufruf von tool1.py von der Systemebene # aus aufgeführt! # # Hauptfenster erzeugen: oWindow=Tkinter.Tk() # Testen einzelner Klassen (s.o.) oZeile=EingabeZeile(oWindow,"Return in Zeile beendet!",20,"exit") oListe=Listbox_mit_Schiebern(oWindow,"Klick im Feld beendet!","exit","exit") Tkinter.mainloop()
Dr. Bernd Kokavecz