Seite 1 von 1

quadratische Verschüsselung am ASCII mit Tkinter

Verfasst: Sonntag 19. Februar 2006, 16:42
von Hannes-Spz
ok, ich hatte ein wochenende mal nix zu tun... :D
einfach mal in die idle einfügen und mal rumstöbern...
es macht ja nix böses, sondern will einfach nur gebetat werden :wink:

das schönste ist: zu sagen:
"den quelltext habt ihr ja!"

nun gut, BlackJack, du hast ja ne astreine
analyse zum schachspiel gemacht, das wirst du DAS kleine bisschen doch
auch noch schaffen, oder? :D :D :D :D
jeder andere sollte sich aber bitte, bitte auch angesprochen fühlen

und diejenigen, die noch nich so viel python können:
einfach nur den code ausführen und mir sagen, was euch an der
optischen umsetzung nich gefällt, wenn ihr keine lust habt, euch in diesem
code zu verlaufen (PS: geht mir selbst so! :wink: )

Code: Alles auswählen

# -*- coding: cp1252 -*-
#***************************************************************************************************************************
#
#                                           Dieses Programm Ist Nich Schädlich
#                                   also braucht ihr euch nicht den kopf darüber zu zer-
#                               brechen, was das alles bedeutet und alles erst einmal auf dem
#                                       PC umsetzen. PS: ich weiß, dass ich eine
#                                   UnMögliche Art Besitze Zu Programmieren - SORRY
#             Dieses Programm verschlüsselt einfach nur nen paar lustige texte - viel spaß beim testen - Hannes-Spz
#
### FUNKTIONS-LISTING:
#   FUNKTION                STATUS  BENUZT  ERKLÄRUNG
#---------------------------------------------------------------------------------------------------------------------------
#   INV                     (ok)    sz      invertieren jedes step-'sten zeichens in text
#   CODE                    (ok)    sz      256 zeichen-versch-MAIN (hin u. zurück)
#   VERSCH                  (ok)    sz      schiebung um za-hl des text-es 
#   _sonderzeichentest      (ok)            ret 'positiv', wenn sonderzeichen in text enthalten sind, else: ret 'negativ'
#   _codierung              (ok)    EVENT   start des   codiervorganges
#   _decodierung            (ok)    EVENT   start des decodiervorganges
#   _vertauschen            (ok)    EVENT   vertauscht beide seiten (textfelder) miteinander (für benutzerfreundlichkeit =)
#   _invert_step            (ok)    EVENT   öffnet einen mini-dialog zur eingabe einer zahl die als invert_step benutzt wird
#   _info                   (ok)            öffnet einen mini-dialog (tkMessageBox) zur anzeige des Gründers u. __VERSION__
#   _widmung                (ok)            öffnet PopUp zur anzeige der entstehung dieses progs
#   _hilfe                  (ok)            öffnet PopUp zur anzeige der noch nicht vorhandenen Hilfe (siehe verbesserungen)
#   _j                      (de)            enthält exec-funktion für _debugmode
#   _debugmode              (ok)            enthält zum größten teil noch nicht festgelegte features
#   _console                (ok)    EVENT   start Console()
#   _deaktivierung          (ok)    EVENT   ... bei 'ein cw verwenden' wird das 2. fenster deaktiviert... usw.
#
#   (ok)  = funktioniert + im einsatz
#   (ff)  = funktioniert nicht ganz         (fehler meist extern)
#   (FF)  = funktioniert nicht              (muss vollständig neu geschrieben werden)
#   (de)  = funktioniert aber
#           nicht im einsatz                (auskommentiert)
#
#   sz    = beruht auf dem test auf sonderzeichen
#   EVENT = könnte auch durch tastatur aufgerufen werden
#
#***************************************************************************************************************************
#
#   wenn man im rechten feld "_debug1" oder _debug und am ende eine zahl, die in der _debugmode-fkt aufgeführt ist,
#   dann im Menu auf Hilfe klickt und dann gleich nochmal auf den gleichnamigen unterpunkt, so wird ein neues menu frei-
#   gestellt, dass die ganzen "normalsterblichen"-user wie meine paar-n-sechzig-jährige oma ja nicht zu sehen brauchen...
#
#   im linken feld einen text eingeben, dann F5 (für die eine richtung der verschlüsselung)
#   drücken (oder im menu durchwuseln) und der ver-(oder ent-)schlüsselte text müsste im rechten feld (self.neu)
#   zu sehen sein...
#   nun noch unten auf "texte vertauschen" klicken oder alt+t drücken damit sich die beiden seiten vertauschen
#   und F6 drücken (oder wieder aufs menu zugreifen) um in die andere richtung zu verschlüsseln...
#
#   dabei muss aber aufgepasst werden, dass
#   -der checkbutton "sonderzeichen vermeiden" bei beiden malen den selben zustand hat
#   -die selben codewörter (1.+2. entry) verwendet wurden
#   -die selbe verschiebungszahl (3. entry) verwendet wurde
#   -die selbe invertierungs-einstellung besteht
#       (Mal ganz kurz das prinzip des invertierens:
#           invertieren heißt: "ich drehe immer alles um..."
#           Regel: invertierte_zahl = maximaler_wert - zu_invertierende_zahl
#           Bsp:   7-2=5; 7-5=2 so einfach isses!
#       gut, und wenn ich nun vor mir ein fenster hab, wo "invert_step" steht, dann weiß ich einfach,
#       dass der programmierer zu faul für den dt. begr. war und dich nur fragen will, das wie-vielte
#       zeichen du aus deinem originaltext(links) immer anhand des ASCII-Codes invertieren willst)
#
#   in der mitte der mitte sollte eigentlich das bildchen "tai-ku.*" stehen, dass man findet,
#   wenn man den dist-ordner durchsucht (von py2exe erschaffen, bild hatte ich aber bisher nur, wenn ich
#   ein tk-programm zu einer exe umwandle)... nehmt einfach eins, dass euch gefällt (nicht zu groß, versteht sich ;)
#
#   die Klasse war eigentlich extern und öffnet nur ein fenster mit 3 buttons und nem scrolled text
#   alternativ kann man sicherlich auch das Message-Widget aus Tk nehmen
#
#   zur unterteilung meines programmes steht an der rechten seite im vollbildmodus der IDLE nach den "*"chen das thema
#   bei main-fkts sind die fkts der verschlüsselung, alle anderen stehen meißt unter essentielle-fkts
#
#   Also Sonderzeichen Werden Alle Zeichen Definiert Für Die Gilt:
#       0 <= ord(Zeichen) < 32
#

__ENTSTEHUNG__=("""Geschichte, wie das ganze entschtanden ist...\n und das ganze als tupel""",)#das komma am ende is wichtig
__VERBESSERUNGEN__="""...
1.) Bessere Hilfe
2.) PopUp(typ=..) belegen (für ScT;L;I)
3.) geschicktere Console
4.) Test auf Betriebssystem
5.) Reaktion auf Commandozeilenparameter
    (für DOS-window)
6.) Fehlermeldungs-Erklärung
7.) Reaktion auf debugmode(sourcecode) in Console
8.) Verwendung von Pmw (python-mega-widgets)
...
"""
__INFO__="der db-mode wurde derzeitig an keine kunktion gebunden..."
__VERSION__="6.1.26.0 "
__ABLAUF__="(INVERTIEREN), (VERSCHIEBEN), CODIEREN, (CODIEREN)"
__SOURCECODE__="habs mit __sourcecode__=(file(...,...).read()) probiert, kommt aber zeilenverschiebung bei raus..."
dbm=0 #gucken, ob der Debugmode schon aktiviert wurde, wird aber - glaub ich - doppelt verwendet...
arg="" #wollte mal ne console basteln, um auf argumente einer verknuüpfung der dazugehörigen exe zu reagieren, der string
# steht dann in der titelleiste
#********************************************************************************************************************IMPORTs
import sys
from Tkinter import *
from ScrolledText import ScrolledText
from tkMessageBox import *

class PopUp:

    """PopUp( text = ("first arg", "second arg",...) ) -> open window"""

    def __init__(self,**options):

        """Hilfe-Menu mit 3 Buttons in einem LabelFrame(unbeschriftet) und einem ScrolledText
        
        texte: tupel oder liste mit strings zum einfügen in den ScrolledText
        title: self.root.title(title): name des fensters
        icon:  self.root.wm_iconbitmap(icon)
        clean_window: ob bei jeder "anzeige()" der vorherige text gelöscht werden soll
        typ: momentan nur "ScT" für ScrolledText möglich, alle anderen möglichkeiten wurden aus platzgründen entfernt
        """

        ### benutzereinstellungen abrufen
        self.options=dict(master=None, texte=(), title="", icon=None, clean_window=0, typ="ScT")
        self.options.update(options)
        self.tu=self.options["texte"]# tu - wie tupel
        ### festlegung des masters
        master=self.options["master"]
        if master: self.root=Toplevel(master)
        else: self.root=Tk()
        ### config des masters
        self.root.title(self.options["title"])
        self.root.wm_iconbitmap(self.options["icon"])
        self.root.wm_positionfrom("user")
        self.ScH=self.root.winfo_screenheight()
        self.ScW=self.root.winfo_screenwidth()
        self.root.wm_geometry("%sx%s+%s+%s" % (str(self.ScW/3), str(self.ScH/3), str(self.ScW/3), str(self.ScH/3) ) )

        self.i=0# sowas wie zähler, an welcher stelle von "texte" angefangen werden soll
        self.c_w=self.options["clean_window"]
        ###widgets
        self.sc=ScrolledText(self.root, wrap="word", width=int(self.ScW/20), height=int(self.ScH/50))
        self.sc.grid(column=0, columnspan=3, row=1, sticky=N+S+W+E)
        
        self.lf=LabelFrame(self.root,width=200,height=20)
        self.lf.grid(column=0,columnspan=3,row=2,sticky=N+S+E+W)
        ### namen setzen sich meißt zusammen aus art + aktion
        self.bu_weiter=Button(self.lf,text="  ->  ",width=15,relief="flat",command=self.anzeige)
        self.bu_weiter.grid(column=2,row=0)
        self.bu_cancel=Button(self.lf,text="  XX  ",width=15,relief="flat",command=self.root.destroy)
        self.bu_cancel.grid(column=1,row=0)
        self.bu_back=Button(self.lf,text="  <-  ",width=15,relief="flat",command=self.back)
        self.bu_back.grid(column=0,row=0)
        
        # ausführen der "back"-fkt. verhindern
        self.bu_back["state"]="disabled"
        
        ### erster durchlauf/erste anzeige
        self.anzeige()
        self.root.mainloop()

    def anzeige(self):
        """nächstes element aus dem tupel/liste in das scrolledtext eingefügt"""

        if self.c_w==1:
            self.sc.delete(0.0, END)
        self.sc.insert(END, self.tu[self.i]+"\n")# "\n" falls DOCH nicht gelöscht werden soll

        ### verhalten der buttons festlegen
        if self.i==0:
            self.bu_back["state"]="disabled"
        elif self.i==1:
            self.bu_back["state"]="normal"

        self.i+=1
        if len(self.tu)==self.i:
            self.bu_weiter.config(text="Ende",command=self.root.destroy)
        
    def back(self):
        """funktion für "back-button" ; ( .goto(seite) find ich aber besser )"""
        #1. seite wird zurückgesetzt
        #2. 3. button soll andere beschriftung erhalten (sieht besser aus...)
        #3. anzeige der seite, auf die self.i zurückgesetzt wurde
        self.i-=2
        if self.bu_weiter["text"]=="Ende":
            self.bu_weiter.config(text="  ->  ",command=self.anzeige)
        self.anzeige()
        
    def goto(self,i):
        """seite "i" anzeigen"""
        self.i=i
        self.anzeige()

#############*Hauptprogramm******************************************************************************************_256bit

class _256bit:
    
    def __init__(self,**opts):
        """Hauptfenster:
        3-spaltig #hätte sonst nicht mit dem maximieren geklappt/hätte sich verschoben
        -mittlerer frame ist nochmal unterteilt"""


        # Variablen zum anzeigen in den menus
        self.__ABLAUF__=opts["ablauf"]
        self.__ENTSTEHUNG__=opts["entstehung"]
        self.__INFO__=opts["info"]
        self.__VERBESSERUNGEN__=opts["verbesserungen"]
        self.__VERSION__=opts["version"]
        self.__SOURCECODE__=opts["s_code"]
        
        #********************************************************************************************************ROOT.CONFIG
        self.root=Tk()
        self.root.wm_positionfrom("user")
        self.ScH=self.root.winfo_screenheight()
        self.ScW=self.root.winfo_screenwidth()
        self.root.wm_geometry("%sx%s+%s+%s"%(str(self.ScW-(self.ScW/5))# fensterbreite = 1/5tel der bildschirmbreite
                                             ,str(int(self.ScH/1.8))# fensterhöhe = bildschirmhöhe:1,8
                                             ,str(self.ScW/9),str(self.ScH/7)# das fenster rel. zentral lagern
                                             ))
        self.root.title(" 256-Zeichenverschlüsselung - v"+self.__VERSION__+"("+opts["arg"]+")")
        
        ### widgets**************************************************************************************************WIDGETS
        # namen setzen sich meißt zusammen aus position(links,mitte,rechts) und art
        self.l_frame=Frame(self.root)
        self.m_frame=Frame(self.root)
        self.r_frame=Frame(self.root)
        self.l_frame.pack(side=LEFT,fill=BOTH,expand=1)
        self.m_frame.pack(side=LEFT,fill=BOTH)
        self.r_frame.pack(side=LEFT,fill=BOTH,expand=1)
        Label(self.l_frame,text="Originaltext",height=1,relief="raised").pack(fill=X,anchor=N)
        Label(self.m_frame,text="Codes",height=1,relief="raised").pack(fill=X,anchor=N)
        Label(self.r_frame,text="(de)codiert:",height=1,relief="raised").pack(fill=X,anchor=N)
        # ori=originaltext neu=neuer text
        self.ori=ScrolledText(self.l_frame,width=(self.ScW/20),height=(self.ScH/30))
        self.neu=ScrolledText(self.r_frame,width=(self.ScW/20),height=(self.ScH/30))
        self.ori.pack(fill=BOTH,expand=1)
        self.neu.pack(fill=BOTH,expand=1)
        # [
        self.dbm=0
        
        self.zweipw=BooleanVar()# art des pw/cw's (True=zwei,False=eins)
        self.verschiebung=BooleanVar()
        self.invert_step=IntVar()
        self.invert_step.set(2)
        self.invertieren=BooleanVar()
        self.sonderz=BooleanVar()
        # ] Variablen
        ### mittleres frame
        self.m1_frame=Frame(self.m_frame)#frame in der "m"- wie mitte
        self.m2_frame=Frame(self.m_frame)
        self.Label1=Label(self.m1_frame,text="1. Codewort:")
        self.Label2=Label(self.m1_frame,text="2. Codewort:")
        self.Label3=Label(self.m1_frame,text="Verschiebung um:")
        self.En_1=Entry(self.m1_frame)
        self.En_2=Entry(self.m1_frame)
        self.En_3=Entry(self.m1_frame)
        self.Label1.pack(anchor=N)
        self.En_1.pack(anchor=N)
        self.Label2.pack(anchor=N)
        self.En_2.pack(anchor=N)
        self.Label3.pack(anchor=N)
        self.En_3.pack()
        self.l1=Label(self.m_frame,text="\n")
        self.l1.pack(fill=BOTH,anchor=CENTER)
        self.m1_frame.pack(fill=BOTH,anchor=CENTER)

        ### bildchen in der mitte ab einer gewissen auflösung (1024x768) des bildschirmes
        ### =)

        if self.ScH>=768:
            try:
                Label(self.m_frame,text=" ").pack(fill=BOTH,anchor=CENTER)
                self.l=Label(self.m_frame)
                self.l.pack(fill=BOTH,anchor=CENTER)
                self.p=PhotoImage(file=r".\Module\tai-ku.gif")
                self.l["image"]=self.p
                Label(self.m_frame,text=" ").pack(fill=BOTH,anchor=CENTER)
                self.l["text"]=""
                self.l1["text"]=""
            except:
                Label(self.m_frame,text="\n\n").pack(fill=BOTH,anchor=CENTER)
        else:
            Label(self.m_frame,text=" ").pack(fill=BOTH,anchor=CENTER)
            self.l1.config(text=" ")
            
        self.m2_frame.pack(fill=BOTH,anchor=CENTER)
        Label(self.m_frame,text="\n\n\n").pack(fill=BOTH,anchor=CENTER)
        self.invert_frame=Frame(self.m2_frame)
        self.Cb_1=Radiobutton(self.m2_frame,text="codewort verwenden",variable=self.zweipw,value=False)
        self.Cb_2=Radiobutton(self.m2_frame,text="zwei cws verwenden",variable=self.zweipw,value=True)
        self.Cb_3=Checkbutton(self.m2_frame,text="zahlencw verwenden",variable=self.verschiebung,onvalue=True,offvalue=False)
        self.Cb_4=Checkbutton(self.invert_frame,text="invertieren",variable=self.invertieren,onvalue=True,offvalue=False)
        self.Cb_5=Checkbutton(self.m2_frame,text="Sonderzeichen vermeiden",variable=self.sonderz,onvalue=False,offvalue=True)
        self.bu_invert_step=Button(self.invert_frame,text="edit",width=10,relief="groove")
        self.bu_vertauschen=Button(self.m2_frame,text="Texte vertauschen",width=20,relief="groove")
        self.Cb_1.pack(anchor=NW)
        self.Cb_2.pack(anchor=NW)
        self.Cb_3.pack(anchor=NW)
        self.Cb_4.pack(side=LEFT)
        self.bu_invert_step.pack(side=LEFT)
        self.invert_frame.pack(anchor=NW)
        self.Cb_5.pack(anchor=NW)
        self.bu_vertauschen.pack(anchor=N)
        self.bu_invert_step["command"]=self._invert_step
        self.bu_vertauschen["command"]=self._vertauschen
        
        ### voreinstellungen********************************************************************************VOREINSTELLUNGEN
        self.Cb_1.select()
        self.Cb_5.select()
        self.En_1.insert(END,"ente")
        self.En_3.insert(END,"0")
        self.En_3["state"]="disabled"
        self.En_2["state"]="disabled"
        self.ori.focus_force()
        #***************************************************************************************************************MENÜ
        self.menu=Menu(self.root,relief="raised",tearoff=0)
        self.aktion=Menu(self.menu,tearoff=0,relief="raised")
        self.aktion.add_command(label="codieren ...               F5",underline=0,command=self._codierung)
        self.aktion.add_command(label="decodierung ...         F6",underline=0,command=self._decodierung)
        self.aktion.add_separator()
        self.aktion.add_command(label="Texte vertauschen  Alt+T",underline=0,command=self._vertauschen)
        self.aktion.add_separator()
        self.aktion.add_command(label="beenden ...             Alt+F4",underline=1,command=self.root.destroy)

        self.einstellungen=Menu(self.menu,tearoff=0,relief="raised")
        self.einstellungen.add_checkbutton(label="vorher invertieren",underline=0,variable=self.invertieren,\
                                           onvalue=True,offvalue=False)
        self.einstellungen.add_command(label="Invertierungs-Schritt",underline=0,command=self._invert_step)
        self.einstellungen.add_separator()
        self.einstellungen.add_checkbutton(label="Sonderzeichen vermeiden",variable=self.sonderz,\
                                           onvalue=False,offvalue=True)
        self.hilfe=Menu(self.menu,tearoff=0,relief="raised")
        self.hilfe.add_command(label="Version",underline=0,command=self._info)
        self.hilfe.add_command(label="Entstehung",underline=0,command=self._widmung)
        self.hilfe.add_separator()
        self.hilfe.add_command(label="Hilfe!!",underline=0,command=self._hilfe)
        self.menu.add_cascade(menu=self.aktion,underline=0,label="Aktion")
        self.menu.add_cascade(menu=self.einstellungen,underline=0,label="Einstellungen")
        self.menu.add_cascade(menu=self.hilfe,underline=0,label="Hilfe")

        #***********************************************************************************************************BINDINGs
        self.root["menu"]=self.menu
        self.root.bind("<F5>",self._codierung)
        self.root.bind("<F6>",self._decodierung)
        self.root.bind("<Alt_L><t>",self._vertauschen)
        self.root.bind("<ButtonRelease>",self._deaktivierung)
        self.root.bind("<Alt_L><c>",self._console)
        #**************************************************************************************************************START
        self.root.mainloop()
    ##
    ##### MAIN FKTs************************************************************************************************MAIN-FKTs
    ##
    def INV(self,text,step,sz=True):
        """invertierungsfkt: jedes "step"te zeichen von "text" wird invertiert
        sz beachten!"""
        if step<=0: return text
        else:
            invertiert=""
            if sz==True: null=0
            else: null=32
            for i in range(1,len(text)+1):
                if i%step==0: invertiert+=unichr(255-(ord(text[i-1])-null))
                else: invertiert+=text[i-1]
            return invertiert
    def CODE(self,zk="",code="",richtung=1,sz=True):
        """codierung von "zk"(zeichenkette) mit "code" in richtung "richtung"
        sz beachten"""
        ### code wird auf länge der zeichenkette gebracht (voraussetzung für die quadratische chiffre!!)
        ### Bsp: Code="ente"; zk="erstes stückchen satz"
        ###                 Code="enteenteenteenteentee"
        try:
            if len(code)==0: return zk
            if len(zk)==0: return "Bitte geben Sie einen Text ein."
            while len(code)<len(zk):
                code+=code
            while len(code)>len(zk):
                code=code[:-1]
            ausgabe=""
        except:
            showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei 'CODE' in (main)")
        if richtung==1:
            try:
                if sz==True: null=0
                else: null=32
                for i in range(len(zk)):
                    c=ord(zk[i])+ord(code[i])
                    if c>255: c-=(256-null)
                    ausgabe+=unichr(c)
            except:
                showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei 'CODE' in (r=1)")
        elif richtung==2:
            try:
                if sz==True: null=0
                else: null=32
                for i in range(len(zk)):
                    c=ord(zk[i])-ord(code[i])
                    if c<null: c+=(256-null)
                    ausgabe+=unichr(c)
            except:
                showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei 'CODE' in (r=2)")
        return ausgabe
    def VERSCH(self,text,zahl,sz=True):
        """verschieben jedes zeichens von text um zahl mit option ob sonderzeichen(sz) erscheinen sollen"""
        try:
            if sz==True: null=0
            else: null=32
            neu=""
            for i in range(len(text)):
                c=ord(text[i])+zahl
                while not null<=c<=255:
                    if c>255: c-=(256-null)
                    elif c<null: c+=(256-null)
                neu+=unichr(c)
            return neu
        except:
            schowerror("ERROR","Schwerwiegender aber erwarteter Fehler bei 'VERSCH'")
    ##
    ##### essentielle Funktionen***********************************************************************************norm.FKTs
    ##
    def _sonderzeichentest(self,text):
        """testet den "text" auf sonderzeichen nach der definition oben
        0 <= ord(Zeichen) < 32      True: positiv   False: negativ"""
        for i in text:
            if ord(i)<32:
                return 'positiv'
        return 'negativ'
    def _codierung(self,event=None):
        """codiert den text im linken ScrolledText-Widget(self.ori)"""
        try:
            test=self._sonderzeichentest(self.ori.get(0.0,END).rstrip())
            if self.sonderz.get()==False:
                if test=='positiv':
                    showinfo("Sonderzeichen","Es wurden Sonderzeichen im Originaltext gefunden.")
                    self.Cb_5.deselect()
                    self.sonderz.set(True)
            text=self.ori.get(0.0,END).rstrip()
            #beginn
            if self.invertieren.get()==True: text=self.INV(text,self.invert_step.get(),sz=self.sonderz.get())
            if self.verschiebung.get()==True: text=self.VERSCH(text,int(self.En_3.get()),sz=self.sonderz.get())
            text=self.CODE(text,self.En_1.get().rstrip(),richtung=1,sz=self.sonderz.get())
            if self.zweipw.get()==True: text=self.CODE(text,self.En_2.get().rstrip(),richtung=1,sz=self.sonderz.get())
            #ende
            self.neu.delete(0.0,END)
            self.neu.insert(END,text)
        except:
            showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei '_codierung'")
    def _decodierung(self,event=None):
        """decodiert den text im linken ScrolledText-Widget(self.ori)"""
        try:
            text=self.ori.get(0.0,END).rstrip()
            #beginn
            if self.zweipw.get()==True: text=self.CODE(text,self.En_2.get().rstrip(),richtung=2,sz=self.sonderz.get())
            text=self.CODE(text,self.En_1.get().rstrip(),richtung=2,sz=self.sonderz.get())
            if self.verschiebung.get()==True: text=self.VERSCH(text,-int(self.En_3.get()),sz=self.sonderz.get())
            if self.invertieren.get()==True: text=self.INV(text,self.invert_step.get(),sz=self.sonderz.get())
            #ende
            self.neu.delete(0.0,END)
            self.neu.insert(END,text)        
        except:
            showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei '_decodierung'")
    def _vertauschen(self,event=None):
        """vertauscht per alt+t die beiden texte (self.ori <--> self.neu)"""
        a=self.neu.get(0.0,END).rstrip()
        self.neu.delete(0.0,END)
        self.neu.insert(END,self.ori.get(0.0,END).rstrip())
        self.ori.delete(0.0,END)
        self.ori.insert(END,a)
    def _invert_step(self,e=None):
        """frage, wievieltes zeichen immer invertiert werden soll"""
        class g:### Sonderfenster aufrufen!

            def __init__(self,var,root):
                try:
                    self.var=var
                    self.k=Tk(); Label(self.k,text="Den wievielten Buchstaben Ihres\n"+\
                                       "Originaltextes wollen Sie immer invertieren?").pack()
                    self.e=Entry(self.k); self.e.pack()
                    self.e.focus_force()
                    self.k.title("invertieren?")
                    width,height=250,80
                    self.k.wm_geometry("%sx%s+%s+%s"%(str(width),str(height),\
                                                      str(root.winfo_screenwidth()/2-width/2),\
                                                      str(root.winfo_screenheight()/2-height/2))) # fenster zentrieren
                    bu=Button(self.k,text="OK",command=self.ok); bu.pack()
                    self.k.bind("<Return>",self.ok)
                except:
                    showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei '_invert_step' in (main)")

            def ok(self,event=None):# auf knopf drücken und das fenster schließt sich!
                try:
                    if self.e.get()!="":
                        self.var.set(int(self.e.get()))
                except:
                    showerror("ERROR","Schwerwiegender aber erwarteter Fehler bei '_invert_step' in (.ok)")
                self.k.destroy()
                    
        g(self.invert_step,self.root)
    ##
    ##### menu definition******************************************************************************************MENÜ-FKTs
    ##
    def _info(self):
        showinfo("version...","""ASCII-Verschlüsselung Version: """+self.__VERSION__+
                 """\n\nby Johannes Stoye""")
    def _widmung(self):
        PopUp(master=self.root,texte=self.__ENTSTEHUNG__,title="Entstehung dieses Programmes",clean_window=1)
    def _hilfe(self):
        text=self.neu.get(0.0,END).rstrip().lower()
        if text.startswith("debug") or text.startswith("_debug"):
            self._debugmode(text[-1])
        else:
            PopUp(master=self.root
                  ,texte=("In der momentanen Version dieses Programmes \n"+\
                          "existiert leider noch keine Hilfe...\n\n"+\
                          "Wenden Sie sich deshalb bitte bei Problemen \n"+\
                          "oder Fragen direkt an mich:\n\n\tTel:\t03643/204066\n\t\t"+\
                          "0179/9663560\n\tE-Mail:\tjohannesstoye@gmx.de\n\n"+\
                          "Ich danke Ihnen für ihr Verständnis!\n\nMfG\nJohannes Stoye",)
                  ,title="Hilfe")
    ############def _j(zk):#    wurde aufgrund der schlechten und entfernten console lahm gelegt
    ############    try:
    ############        exec zk
    ############    except SyntaxError:
    ############        return "Parsing...!, EOF..."
    def _debugmode(self,za="3"):
        """aufruf des zusatzmenus mit za(von "zahl" abgeändert)="..."!"""
        if type(za)==str:
            if za.isdigit()==1:
                za=int(za)
            else:
                if za in "ge":# für endung ~mode oder nur _debug... halt ohne zahl am ende
                    self.neu.delete(0.0,END)
                    self.neu.insert(END,"0=ende\n1=start menü\n2=codierungs-abfolge\n3=db-info\n4=verbesserungsvorschläge")
                    return
        if za==0:#"debug" rückgängig machen
            if self.dbm==1:
                self.menu.delete(3)#das debugmenu wird gelöscht
                self.root.update()
                self.dbm=0
        elif za==1:#"debug" einschalten, wenn nicht schon ist...
            if self.dbm==0:
                self.debug=Menu(self.menu,tearoff=0,relief="raised")
                self.debug.add_command(label="ablauf (codierung)",command=lambda: self._debugmode(2))
                self.debug.add_command(label="infos",command=self._debugmode)
                self.debug.add_command(label="veränderungen",command=lambda: self._debugmode(4))
                self.debug.add_separator()
                self.debug.add_command(label="debugmode(0)",command=lambda: self._debugmode(0))
                self.menu.add_cascade(menu=self.debug,label="debug")
                self.root.update()
                self.dbm=1
        elif za==2:
            self.neu.delete(0.0,END)
            self.neu.insert(END,self.__ABLAUF__)
        elif za==3:
            self.neu.delete(0.0,END)
            self.neu.insert(END,self.__INFO__)
        elif za==4:
            self.neu.delete(0.0,END)
            self.neu.insert(END,self.__VERBESSERUNGEN__)
    ############    elif type(za[0])==str:
    ############        return _j(za[0])
    def _console(self,e=None):
        """aufruf der klasse "console" (FF)->(de)"""
        ##Console(self.root,debugmode=self._debugmode)
        ###hier könnt IHR ja mal dran basteln ;)
        pass
    def _deaktivierung(self,e=None):
        """praktischer schönheitsfehler
        genutzt um entries zu deaktivieren, wenn die einstellungen dafür herausgenommen wurden
        testet doch einfach, wass passiert, wenn man hier für alles pass einsetzt
        und auf die check/radiobuttons klickt!"""
        
        if self.verschiebung.get()==True:
            self.En_3["state"]="normal"
        else: self.En_3["state"]="disabled"
        if self.zweipw.get()==True:
            self.En_2["state"]="normal"
        else:self.En_2["state"]="disabled"
        self.root.update()
        
g=_256bit(s_code=__SOURCECODE__,
          info=__INFO__,
          version=__VERSION__,
          ablauf=__ABLAUF__,
          verbesserungen=__VERBESSERUNGEN__,
          entstehung=__ENTSTEHUNG__,
          arg=arg)
#*************************************************************************************************************VERBESSERUNGEN
#   wie oben beschrieben in der rechten seite "_debugmode"/"_debug" einfügen(kann auch groß geschrieben sein)
#   , direkt daran die 1 setzen und dann im hilfe-menu auf hilfe klicken
#   dann kann man auch "_debug" oder -"mode" auch ohne zahl eingeben für ein inhaltsverzeichnis, was an zahlen möglich ist..
#
#   ach ja nochwas: dieses prog kann KEINE 256bit-Verschlüsselung, sondern nur um 256 zeichen quadratisch verschlüsseln
#   vigenaire oder so...

Verfasst: Sonntag 19. Februar 2006, 17:23
von jens
Ich verweise da mal auf [wiki]Lange Zeilen im Sourcecode[/wiki] :lol:

Verfasst: Sonntag 19. Februar 2006, 18:30
von Mr_Snede

Code: Alles auswählen

python -u pf-tk-asci_verschlüsselung.py
  File "pf-tk-asci_verschlüsselung.py", line 522
    """aufruf des zusatzmenus mit za(von "zahl" abgeändert)="...""""
                                                                    ^
SyntaxError: EOL while scanning single-quoted string
in der Zeile ist ein " zuviel

Verfasst: Sonntag 19. Februar 2006, 18:35
von Hannes-Spz
hm, meine idle hat nicht rumgemeckert...
ich wollte ja die drei punkte lediglich in hochkommata setzen. :cry:

aber gott-sei-dank darf man sein eigenen krams editieren... :D :D :D

Verfasst: Sonntag 19. Februar 2006, 19:14
von Mr_Snede
Innerhalb von doppelten Anführungszeichen, kannst du einfache Anführungszeichen verwenden und umgekehrt.

in Diesem Fall reicht es aber ein Leerzeichen einzufügen:

Code: Alles auswählen

"""aufruf des zusatzmenus mit za(von "zahl" abgeändert)="..." """
So können die schließenden 3 Anführungszeichen auch als solche erkannt werden.

Ich habe mit scite (auf debian testing) getestet.

cu Sebastian