Seite 1 von 1

Warum schließt sich mein Programm sofort wieder?

Verfasst: Donnerstag 1. Oktober 2015, 07:28
von Hotp44py
Ich habe ein Verschlüsselungsprogramm geschrieben. Wenn ich es in IDLE teste funktioniert alles, aber direkt aus dem Windows Explorer öffnet sich kurz die Python shell und es werden zwei(aufgrund der kurzen anzeigezeit) unlesbare Zeilen ausgegeben :K .
Ich weiß, dass mein Programmierstil nicht der beste ist :oops:
Hier der code:

Code: Alles auswählen

#Python 3.4.1
from tkinter import *
from tkinter.filedialog import *
import time
import sys
import os
from string import *
import webbrowser

global root
root = Tk()

class screen(Frame):#Mein spezieller Frame
    
    def add_widget(self,widget,**options):
        widget.master = self
        widget.pack(**options)
    
    def geometry(self,höhe,breite):
        self["height"] = höhe
        self["width"] = breite
    
    def __init__(self,master,borderwidth=0,bg="white",pos=NONE):
        Frame.__init__(self,master,borderwidth=borderwidth,bg=bg)
        print("screen angelegt")

def tempsavescr(scrname):#bewährt, um die screens zu wechseln
    schreiber = open("Dateien/tmp/packscreen.tmp","w")
    schreiber.write(scrname)
    schreiber.close()

tempsavescr("tempsavescreen und temploadscreen funktionieren!")

def temploadscr():#bewährt, um die screens zu wechseln
    leser = open("Dateien/tmp/packscreen.tmp")
    packscreen = leser.read()
    leser.close()
    return packscreen;

print(temploadscr())
tempsavescr("start")

#def verschlüsseln():
#    pass
#verschlüsseln() wird nur durch einen Button in vgui() gerufen.

def vgui():
    
    def acceptevent(vstring):
        print("vstring( " + vstring + " )wird an verschlüsseln übergeben.")
        verschlüsseln(vstring)
    packscr = temploadscr()
    print(packscr)
    if packscr == "start":
        start.pack_forget()
    elif packscr == "escr":
        escr.pack_forget()
    elif packscr == "vscr":
        exit()
    global vscr
    vscr = screen(root)
    vscr.geometry(höhe=100,breite=100)
    vscr.text = screen(vscr)
    vscroll = Scrollbar(vscr.text)
    vtext = Text(vscr.text,height=40,width=170)
    vscroll.pack(side="right",fill="y")
    vtext.pack(side="left",fill="y")
    vscroll.config(command=vtext.yview)
    vtext.config(yscrollcommand=vscroll.set)
    okbutton = Button(vscr,command=lambda:acceptevent(vtext.get(1.0,END)),text="Verschlüsseln",relief="raised",borderwidth=1,bg="white",fg="green")
    okbutton.pack(side="bottom")
    vscr.text.pack()
    vscr.pack()
    tempsavescr("vscr")

#def entschlüsseln(string):
#    pass
#entschlüsseln() wird nur durch einen Button in egui() gerufen

def egui():
    
    def acceptevent(estring):
        print("estring( " + estring + " )wird an verschlüsseln übergeben.")
        entschlüsseln(estring)
    packscr = temploadscr()
    print(packscr)
    if packscr == "start":
        start.pack_forget()
    elif packscr == "escr":
        exit()
    elif packscr == "vscr":
        vscr.pack_forget()
    global escr
    escr = screen(root)
    escr.geometry(höhe=100,breite=100)
    escr.text = screen(escr)
    escroll = Scrollbar(escr.text)
    etext = Text(escr.text,height=40,width=170)
    escroll.pack(side="right",fill="y")
    etext.pack(side="left",fill="y")
    escroll.config(command=etext.yview)
    etext.config(yscrollcommand=escroll.set)
    okbutton = Button(escr,command=lambda:acceptevent(etext.get(1.0,END)),text="Entschlüsseln",relief="raised",borderwidth=1,bg="white",fg="green")
    okbutton.pack(side="bottom")
    escr.text.pack()
    escr.pack()
    tempsavescr("escr")

root.title("SC Test")
root.geometry("500x500")
bar = Menu(root)#erstelle leiste
#featurem
featurem = Menu(bar)
featurem.add_command(label="Verschlüsseln",command=lambda:vgui())
featurem.add_command(label="Entschlüsseln",command=lambda:egui())
#helpm
helpm = Menu(bar)
helpm.add_command(label="Website Hotp44.de",command=lambda:webbrowser.open("http://Hotp44.de/"))

global start
start = screen(root)
startlabel1 = Label(start,text="\nWillkommen bei SC!\n",bg="blue",fg="yellow",font="Arial 30")
start.add_widget(startlabel1)
startlabel2 = Label(start,text="Bitte wählen Sie eine Aktion unter 'Funktionen' aus!",bg="white",fg="black",font="Arial 10")
start.add_widget(startlabel2)
start.pack()
kill = Button(root,text="\nBeenden\n",bg="white",fg="red",font=None,command=exit)
kill.pack(side="bottom")

bar.add_cascade(label="Funktionen",menu=featurem)#zeige "Funktionen" an
bar.add_cascade(label="Hilfe",menu=helpm)#zeige "Hilfe" an
root.config(menu=bar)
root.mainloop()

Re: Warum schließt sich mein Programm sofort wieder?

Verfasst: Donnerstag 1. Oktober 2015, 07:33
von BlackJack
@Hotp44py: Starte das Programm mal nicht per Doppelklick sondern von einer Konsole/Eingabeaufforderung aus, dann kannst Du auch die Fehlermeldung lesen.

Re: Warum schließt sich mein Programm sofort wieder?

Verfasst: Donnerstag 1. Oktober 2015, 07:35
von Hotp44py
@BlackJack Danke für den Tipp! ich mach das mal...

ICh habs hinbekommen...

Verfasst: Donnerstag 1. Oktober 2015, 07:43
von Hotp44py
Im Code hatte ich Umlaute verwendet. Vielen Dank! :D
http://Hotp44.de

Re: Warum schließt sich mein Programm sofort wieder?

Verfasst: Donnerstag 1. Oktober 2015, 07:48
von BlackJack
@Hotp44py: Als nächstes solltest Du dann das loswerden was da nicht funktioniert, denn das ist ja noch schlimmer als ``global``, was in einem sauberen Programm auch nichts zu suchen hat.

Die Sternchen-Importe sollten nicht sein, und die Lektüre vom Style Guide for Python Code könnte nicht schaden.

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm gehört nicht dort hin, schon gar nicht mit den anderen Definitionen vermischt, denn unübersichtlicher geht's kaum. Üblicherweise heisst die Funktion mit dem Hauptprogramm `main()`.