[linux-l] TypeError:'str' object is not callable (Python)=>skript

Olaf Radicke olaf_rad at gmx.de
Mi Jun 5 22:33:08 CEST 2002


On Wed, Jun 05, 2002 at 08:29:41PM +0000, Olaf Radicke wrote:
> Hi!
> 
> Ich sitze jetzt schon acht Stunden an mein Problem.
> 
> Ich hänge mein Skript an die Mail. 

...vergessen!
-------------- nächster Teil --------------

# das widerholen der menue-listen integriert und Kommentare eingfügt
# Curser funktioniert, löschen funktioniert, Drucken und Speichen
# funktioniert.
# "Speichern unter..." wird impementiert

import shelve
import string
import Tkinter
import posix
from Tkconstants import *

schriftart = "Arial 22 "
tk = Tkinter.Tk()
haubt_frame = Tkinter.Frame(tk)
haubt_frame.pack(side=BOTTOM, fill=X)

frame_oben = Tkinter.Frame(haubt_frame, relief=RIDGE, borderwidth=2)
frame_oben.pack(fill=BOTH,expand=1, padx=5, pady=4)
label_oben=Tkinter.Label(frame_oben)
label_oben["text"] = "Kleinbuchstaben"
label_oben.pack(side=LEFT, expand=1, padx=5, pady=4)

frame_mitte = Tkinter.Frame(haubt_frame, relief=RIDGE, borderwidth=2)
frame_mitte.pack(fill=BOTH, expand=1, padx=5, pady=4)
text=Tkinter.Text(frame_mitte,
                  width=60,
                  height=20,
                  background="white",
                  borderwidth=3)
text.pack()

frame_unten = Tkinter.Frame(haubt_frame, relief=RIDGE, borderwidth=2)
frame_unten.pack( fill=BOTH,expand=1, padx=5, pady=4)
label_unten=Tkinter.Label(frame_unten)
label_unten.pack(side=LEFT, expand=1, padx=5, pady=4)

label_oben.configure(font=schriftart)
label_unten.configure(font=schriftart)
text.configure(font=schriftart)
text.focus_set()

# einer reie fon listen für das menue wir geschaffen 
kleinbuchstaben = ["a","b","c","d","e","f","g","h","i","j","k","l","m",
                   "n","o","p","q","r","s","t","u","v","w","x","y","z"]
kleinbuchstaben_anzahl = len(kleinbuchstaben)

grossbuchstaben = ["A","B","C","D","E","F","G","H","I","J","K","L","M",
                   "N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
grossbuchstaben_anzahl = len(grossbuchstaben)

sonderzeichen = ["Leerzeichen","Neue_Zeile",".",",",":","!","?","ß","ö",
                 "Ö","ü","Ü","ä","Ä","=","(",")","§","$","%","&","\\",
                 "/",";","-","+",">","<","]","[","\'","#","*","|","{","}"]
sonderzeichen_anzahl = len(sonderzeichen)

zahlen = ["0","1","2","3","4","5","6","7","8","9"]
zahlen_anzahl = len(zahlen)

funktionen = ["Cursor nach rechts","Cursor nach links","Cursor runter",
              "Cursor hoch","Links löschen","Rechts löschen","Drucken",
              "Speichen","Speichern unter...","...Datei öffnen","E-mail"]
funktionen_anzahl = len(funktionen)

menu_listen = [kleinbuchstaben,grossbuchstaben,sonderzeichen,zahlen,funktionen]

# Hilfsliste für die Anzeige
menu_listen1 = ("Kleinbuchstaben","Grossbuchstaben","Sonderzeichen","Zahlen",
               "Funktionen")
menu_listen1_anzahl = len(menu_listen1)

####################################################################
# hier werden die metoden und eigenschaften für die auswahl in dem #
# menue definiert                                                  #
####################################################################
class Menue:
    def __init__(self,name):
        self.name=name
        # speichert die ausgewählte Menuliste
        self.die_liste = 0
        # speichert den ausgewählen Menupunkt
        self.das_element=0
        # speichert in welcher Menueebene ich mich befinde
        self.zustand = 0
        # speichert ob schon ein Menuepunkt ausgewählt wurde und
        # jetzt in das Haubtmenue zurüchgesprungen werden muss
        self.klick = 0

    def auswahl(self):
        #label_unten["text"] = "***   ***"
        # erste Menue-Ebene
        if self.zustand == 0:
            self.die_liste = self.die_liste + 1
            # am Ende der Liste von Vorne anfangen
            if self.die_liste >=menu_listen1_anzahl:
                self.die_liste = 0
            label_oben["text"] = menu_listen1[self.die_liste]
        elif self.zustand == 1:
            # das Selbe mit dem Ende der Liste der zweiten Ebene. Mit
            # der Prüfung um welche List es sich handelt um die Länge
            # der Liste zu berüchsichtigen
            self.das_element += 1
            if self.die_liste == 0 and self.das_element >= kleinbuchstaben_anzahl:
                self.das_element = 0
                
            elif self.die_liste == 1 and self.das_element >= grossbuchstaben_anzahl:
                self.das_element = 0
            elif self.die_liste == 2 and self.das_element >= sonderzeichen_anzahl:
                self.das_element = 0
                
            elif self.die_liste == 3 and self.das_element >= zahlen_anzahl:
                self.das_element = 0

            elif self.die_liste == 4 and self.das_element >= funktionen_anzahl:
                self.das_element = 0

            label_oben["text"] = menu_listen[self.die_liste][self.das_element]
            # verlassen der ausgewählen Funktion
        elif self.zustand == 2:
            self.die_liste = 0
            self.das_element = 0
            self.zustand = 0
            label_oben["text"] = menu_listen1[self.die_liste]


    def bestaetigen(self):
        # Listenelement der ersten Menue-Ebene auswählen
        if self.zustand == 0:
            self.das_element = 0
            label_oben["text"] = menu_listen[self.die_liste][self.das_element]
            self.zustand = 1
            # Listenelement der ersten Menue-Ebene auswählen
        elif self.zustand == 1:
            # ist die Liste mit den Funktionen ausgewählt worden?
            if self.die_liste == 4:
                self.zustand = 2
                # ...Nein, ist sie nicht...
            elif self.die_liste <= 3:
                Texteinfuegen.einfuegen()
                self.die_liste = 0
                self.das_element = 0
                self.zustand = 0
                label_oben["text"] = menu_listen1[self.die_liste]
            
        if self.zustand == 2:
            # rufe die passensen funktionen auf #
            Sonderfunktionen.aufruf()

        # Achte darauf das dr Curor immer im sichbaren Bereich bleibt
        self.cursor_index=text.index(INSERT)
        text.see(self.cursor_index)
        
#####################################################################
# Ende der difinition der Klasse "Menue"                            #
#####################################################################
# die instanz für die menue-navigation und das schreiben wird aufgerufen
Menu_bewegung=Menue("schnick")


#####################################################################
# Difintion der Klasse "Funktions_menue"                            #
#####################################################################

class Funktions_menue:
    def __init__(self,name):
        self.name=name
        self.das_element=0
        self.cursor_index =0
        self.cursor_index_split=[1]
        self.int_index=0
        self.alter_index=0
        self.transport=0
        self.text_ausgabe=""
        self.datei_handel=""
        self.datei_name=""
    def aufruf(self):
        self.das_element=Menu_bewegung.das_element
        # was soll passieren wenn funktion xy aus Menue "Funktionen"
        # aufgeruffen wird...
        if self.das_element == 0:
            # cursor nach rechts
            self.cursor_index=text.index(INSERT)
            self.transport= self.cursor_index + "+1 chars"
            text.mark_set(INSERT,self.transport)
        elif self.das_element == 1:
            # cursor nach links
            self.cursor_index=text.index(INSERT)
            self.transport= self.cursor_index + "-1 chars"
            text.mark_set(INSERT,self.transport)
        elif self.das_element == 2:
            # cursor nach unten
            self.cursor_index=text.index(INSERT)
            self.transport= self.cursor_index + "+1 lines"
            text.mark_set(INSERT,self.transport)
        elif self.das_element == 3:
            # cursor nach oben
            self.cursor_index=text.index(INSERT)
            self.transport= self.cursor_index + "-1 lines"
            text.mark_set(INSERT,self.transport)
        elif self.das_element == 4:
            # links löschen
            self.cursor_index=self.alter_index=text.index(INSERT)
            self.cursor_index_split = string.split(self.cursor_index,".")
            self.int_index = int(self.cursor_index_split[1])
            self.int_index -= 1
            if self.int_index <= -1:
                # sind wir am anfang der Zeile dann...
                self.int_index = int(self.cursor_index_split[0])
                self.int_index -= 1
                self.cursor_index_split[0] = str(self.int_index)
                self.cursor_index = ".".join([self.cursor_index_split[0],self.cursor_index_split[1]])
                self.transport= self.cursor_index + "lineend"
                text.delete(self.transport,self.alter_index)
            else:
                # sonst...
                self.cursor_index_split[1] = str(self.int_index)
                self.cursor_index = ".".join([self.cursor_index_split[0],self.cursor_index_split[1]])
                text.delete(self.cursor_index,self.alter_index)
                 
        elif self.das_element == 5:
            # rechs löschem
            self.alter_index = self.cursor_index = text.index(INSERT)
            self.transport= self.cursor_index + "+1 chars"
            text.delete(self.alter_index, self.transport)

        elif self.das_element == 6:
            # drucken
            self.text_ausgabe = text.get(1.0, "end")
            self.datei_handel = open("./ot-tmp","w")
            self.datei_handel.write(self.text_ausgabe)
            self.datei_handel.close()
            posix.system("lpr ./ot-tmp")
        elif self.das_element == 7:
            # speichern
            self.text_ausgabe = text.get(1.0, "end")
            self.datei_handel = open("./ot-tmp","w")
            self.datei_handel.write(self.text_ausgabe)
            self.datei_handel.close()
            
        elif self.das_element == 8:
            # speichern unter...
            self.datei_name= text.get("1.0", "1.0 lineend")
            text.delete("1.0", "1.0 lineend")
            self.text_ausgabe = text.get(1.0, "end")
            self.datei_handel = open(self.datei_name,"w") 
            self.datei_handel.write(self.text_ausgabe)
            self.datei_handel.close()

            label_unten["text"] = "Speichern unter: " + self.datei_name
        elif self.das_element == 9:
            # öffnen
            self.datei_name= text.get("1.0", "1.0 lineend")
            text.delete("1.0", "1.0 lineend")
            self.datei_handel = open(self.datei_name,"r") 
            self.text_ausgabe = self.datei_handel.read(300)
            text.insert("2.0",self.text_ausgabe)
            self.datei_handel.close()
            label_unten["text"] = "Es wurde geöffnet: "

        elif self.das_element == 8:
            # e-mail
            label_unten["text"] = "Noch nicht Implementiert!! -Sorry!"



#####################################################################
# ende der definiton der Klasse "funktions_menue"                   #
#####################################################################
# die Instanz für die funktionen des Menue werden aufgeruffen 
Sonderfunktionen=Funktions_menue("plock")


#####################################################################
# Definiton der Klasse "Schreiben" um die ausgewählten Buchstaben   #
# in das Textfeld zu übertragen                                     #
#####################################################################
class Schreiben:
    def __init__(self,name):
        # Die Sonderzeichen werden für den internen programmgebrauch doppelt
        # geführt weil z.B. der Zeilenumbruch intern als "\n" dargestellt
        # wird.
        self.cursor_index=0
        self.sonderzeichen = [" ","\n",".",",",":",
                              "!","?","ß","ö","Ö","ü","Ü","ä","Ä","=",
                              "(",")","§","$","%","&","\\","/",";","-",
                              "+",">","<","]","[","\'","#","*","|","{",
                              "}"]
        self.menu_listen = [kleinbuchstaben,grossbuchstaben,
                            self.sonderzeichen,zahlen]
        self.letztes_wort = ""
        self.letztes_zeichen = ""
        
    def einfuegen (self):
        self.cursor_index=text.index(INSERT)
        self.letztes_zeichen = self.menu_listen[Menu_bewegung.die_liste][Menu_bewegung.das_element]
        #print self.letztes_zeichen + "eingegebenst zeichen\n"
        # wurde das word bendet, speichere es.
        if self.letztes_zeichen == " " or self.letztes_zeichen == "\n":
            Word_vorschlag.speichern(self.letztes_wort)
            text.insert(self.cursor_index,self.letztes_zeichen)
        else:
            text.insert(self.cursor_index,self.letztes_zeichen)
            # auslesen was bisher geschrieben wurde
            # um ein Word vozuschlagen
            self.letztes_wort = text.get(self.cursor_index +"wordstart",self.cursor_index +"wordend")
            print self.letztes_wort +" wortvorschlat"
            Word_vorschlag.vorschlag(self.letztes_wort) 
            print self.letztes_wort +" wortvorschlat"
#####################################################################
# Ende der deviniton von "Schreibe"                                 #
#####################################################################
# Die instans für das Texteinfügen wird auferufen
Texteinfuegen=Schreiben("schnack")

#####################################################################
# Begin Klasse Vorschlag                                            #
#####################################################################
class Vorschlag:
    def __init__(self, name):
        #self.geschriebenes = []
        self.name = name
        self.geschriebenes=""
        self.fertiges_word=""
        #self.db={}
        #self.db_keys = []
        #self.zaehler = 0
        self.vorschlag = ""
        #self.schluessel =""
        
    def vorschlag (self, geschriebenes):
        #self.geschriebenes = geschriebenes
        print "shitt" #self.geschriebenes #+"<=Vorschlag"
 #       self.db = shelve.open("./myshelve","r")
 #       self.db_keys = self.db.keys()
 #       self.zaehler = 0
 #       self.vorschlag = ""
 #       self.schluessel = ""
        #        for self.schluessel in self.db_keys:
        #print "self.db_keys"
            # die schlüssel in der Datenbank durchlaufen
#            if self.schluessel.startswith(self.geschriebenes[0:6]):
                # suche nach schlüsseln, die mit den gleichen buchstaben
                # beginnen wie das geschriebene Wort
        #self.zaehler += 1
        #print self.zaehler
#                if self.zaehler > 1:
                    # wenn dies nicht das erste Element der Liste ist...
#                    if self.db[self.vorschlag] < self.db[self.schluessel]:
                        # sollte das nächste Wort was passt, eine
                        # höhere warscheinlichkeit haben, nehme das...
#                        self.vorschlag = self.schluessel
#                else:
                    # dies ist der erste durchlauf...
#                    self.vorschlag = self.schluessel
#        label_unten["text"] = "Wollen sie schreiben: " + self.vorschlag +" ?"
#        print self.vorschlag #+" <=vorschlag"
#        self.db.close()
#         print "\n kein fehler"
def speichern (self,fertiges_word):
                   #fertiges_word):
        self.fertiges_word = fertiges_word
        db = shelve.open("./myshelve")
        wort_laenge = len(self.fertiges_word)
        if wort_laenge > 6:
            # ist das Wolt länger als 6 Buchstaben speicher es. 
            if db.has_key(self.fertiges_word):
                # ist das Wort schon mal gespeichert worden...
                db[self.fertiges_word] += 1
            else:
                # das Word zum ersten mal speichern
                db[self.fertiges_word] = 1
        db.close()
        print self.fertiges_word +" <=speichern"
#####################################################################
# Ende Klasse Vorschlag                                             #
#####################################################################
Word_vorschlag=Vorschlag("ploeff")

# definton der Maus-Bindung
def linke_maustaste(ev):
    Menu_bewegung.bestaetigen()
def rechte_maustaste(ev):
    Menu_bewegung.auswahl()



tk.bind("<Button-1>",linke_maustaste)
tk.bind("<Button-3>",rechte_maustaste)

tk.mainloop()




Mehr Informationen über die Mailingliste linux-l