Tool1

Dr. Bernd Kokavecz, 21.05.2000 hopps
Tool1 stellt den Schülern eine beschriftete Eingabezeile, zwei Versionen von Listboxen mit Schiebern und drei angeordnete Knöpfe zur Verfügung.

Ü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:

gif

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()      

zurück

Dr. Bernd Kokavecz
21.05.2000