Passwort abfragen befor das Programm gestartet wird

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Der Fehler ist klar, du machst mehrere Hauptfenster (.Tk()) auf.
Nutze wenn du wirklich solche Sachen Brauchst Toplevel-Widgets.

Zu deinem Problem:
Schreib dir eine Applikation, Passwortabfrage, welche ein return gibt uind dir sagt ob du richtig lagst.
Dann erst baue dein "Mainframe".
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Py-Prog hat geschrieben:
Leonidas hat geschrieben:
Py-Prog hat geschrieben:Ja sag mal wie **** bist du? Wie oft muss ich dir noch sagen das deine vorschläge sinnlos sind, auch wenn sie funktionieren. (Ich weiß es ist nur net gemeint.)
Wenn du weißt dass es nett gemeint ist, warum fällst du denn Leute die dir helfen so an? Also nach so 'ner Aussage hätt ich schon wenig lust dir nochmal zu helfen.
Wieso wohl es sollte jeden schon längst klar sein dass es nicht darum geht wie mache ich eine Passwort abfrage. Sonst Hätte ich am anfang ja geschrieben:

Ich würde gerne eine Passwort abfage in ein Programm einbauen, wie krieg ich sowas hin?
Hast du ja (fast, als Thread-Titel):
Passwort abfragen befor das Programm gestartet wird

(Klar habe ich auch den Thread gelesen, aber nicht verstanden was du genau erreichen willst)
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

nomnom hat geschrieben: (Klar habe ich auch den Thread gelesen, aber nicht verstanden was du genau erreichen willst)
Ich glaube da bist du nicht der einzige, vieleicht sollte ich mir vorher überlegen was ich schreibe, dass das nicht öfter vorkommt.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

mh, will hier zwar nicht dazwischen gehen bzw eine Partei ergreifen,
aber das Thema ist eindeutig Tkinter bezogen und diese Information wäre von Anfang an sehr nützllich gewesen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Habs jetzt geschaft, Danke.
Da kann ich lange mit if rumprobieren wenn die funktion None zurückgibt ... :roll:
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben: Ich will damit ein Programm schützen mit dem ich einstellungen für ein anderes Programm vornehme.(Wohl besser will ist noch nicht ganz fertig).
Dir ist aber schon klar, dass das absolut nichts bringt? (Zumindest nicht auf diesem Wege)

Offtopic: Wir hatten doch unlängst mal diesen Thread, in dem sich der ein oder andere über Deine Ausdrucksweise beschwert hat; nach diesem Thread kann ich mich dem nur anschließen und werde mir in Zukunft stark überlegen, Dir noch zu helfen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@Py-Prog
Ich hatteeigentlich an so etwas gedacht

Code: Alles auswählen

import Tkinter as tkinter
import tkSimpleDialog
import hashlib

class PasswdDiag(tkSimpleDialog.Dialog):

    def body(self, master):
        self.result = False        
        self.title("Login:")
     
        tkinter.Label(master, text="Name: ").grid(row=0, column=0)
        self.user =tkinter. Entry(master)
        self.user.grid(row=0, column=1)
        
        tkinter.Label(master, text="Passwort: ").grid(row=1, column=0)
        self.pw = tkinter.Entry(master, show="*")
        self.pw.grid(row=1, column=1)
        
        return self.user
        
    def apply(self):
        global database
        user = self.user.get()
        pw = self.pw.get()
        
        if user in database:
            if hashlib.md5(pw).hexdigest() == database[user]:
                self.result = True


class MyApp(tkinter.Frame):
    def __init__(self, master, cnf=()):
        tkinter.Frame.__init__(self, master, cnf)

        tkinter.Label(self, text="Mainframe").pack()
        

if __name__ == "__main__":
    root = tkinter.Tk()
    
    database = { "Fritz" : "098f6bcd4621d373cade4e832627b4f6",  # test
                       "Karl"  : "76a2173be6393254e72ffa4d6df1030a" } # passwd
           
    pf = PasswdDiag(root, "Login:")

    if pf.result:
        ma = MyApp(root)
        ma.pack()

    root.mainloop()
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hyperion hat geschrieben:
Py-Prog hat geschrieben:Offtopic: Wir hatten doch unlängst mal diesen Thread, in dem sich der ein oder andere über Deine Ausdrucksweise beschwert hat; nach diesem Thread kann ich mich dem nur anschließen und werde mir in Zukunft stark überlegen, Dir noch zu helfen.
Ack! Full Ack!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Solange die Daten nicht aus einer entfernten Quelle stammen, deren Zugriff nicht per Passwort geschützt sind (etwa eine DB-basierte Applikation o.ä.), nützt einem so ein "Schutz" natürlich gar nichts, sonder er ist rein kosmetischer Natur:

Code: Alles auswählen

import Tkinter as tkinter
import tkSimpleDialog
import hashlib

class PasswdDiag(tkSimpleDialog.Dialog):

    def body(self, master):
        self.result = False        
        self.title("Login:")
     
        tkinter.Label(master, text="Name: ").grid(row=0, column=0)
        self.user =tkinter. Entry(master)
        self.user.grid(row=0, column=1)
        
        tkinter.Label(master, text="Passwort: ").grid(row=1, column=0)
        self.pw = tkinter.Entry(master, show="*")
        self.pw.grid(row=1, column=1)
        
        return self.user
        
    def apply(self):
        # oha... bring ihn nicht auf solche Ideen!
        global database
        user = self.user.get()
        pw = self.pw.get()
        
        if user in database:
            if hashlib.md5(pw).hexdigest() == database[user]:
                self.result = True


class MyApp(tkinter.Frame):
    def __init__(self, master, cnf=()):
        tkinter.Frame.__init__(self, master, cnf)

        tkinter.Label(self, text="Mainframe").pack()
        

if __name__ == "__main__":
    root = tkinter.Tk()
    
    database = { "Fritz" : "098f6bcd4621d373cade4e832627b4f6",  # test
                       "Karl"  : "76a2173be6393254e72ffa4d6df1030a" } # passwd
           
#    pf = PasswdDiag(root, "Login:")

#    if pf.result:
# einfach zwei Zeilen auskommentieren...
# zwei Mal die Einrückung verringern
    ma = MyApp(root)
    ma.pack()
# und schon habe ich auch so Zugriff! :-)

    root.mainloop()
Vielleicht ist es dem OP ja schon klar, aber falls nicht, macht es der Code jetzt noch mal deutlich ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

:shock: wusste ich echt noch nicht! :D
ähm, das global vergiss es schnell wieder, mir war nur auf die schnelle nichts besseres eingefallen. :| ,
da man in einem Dialog Fenster weder bei body, noch bei apply weitere Parameter übergeben kann.

Kennt sich eventuell jemand besser bei tkinter Dialogen aus, sonst würde ich einfach einen eigenen bauen, in dem ich direkt von Toplevel ableite.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

nomnom hat geschrieben:
Hyperion hat geschrieben:Offtopic: Wir hatten doch unlängst mal diesen Thread, in dem sich der ein oder andere über Deine Ausdrucksweise beschwert hat; nach diesem Thread kann ich mich dem nur anschließen und werde mir in Zukunft stark überlegen, Dir noch zu helfen.
Ack! Full Ack!
Meine Güte, ihr seid aber auch ganz schöne Mimosen. Wenn ihr Py-Prog so genau beobachtet, dann müsstet ihr eigentlich schon lange gemerkt haben, dass solche "Erziehungsversuche" keine Früchte tragen werden. Py-Prog ist halt einer, der sich nichts sagen lässt und seinen Weg geht: "Technik ist, wenn alles funktioniert und keiner weiß warum". (Den *musste* ich jetzt einfach anwenden) ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mir geht es weniger um inhaltliche oder formale Schwächen der Beiträge bezüglich eines Themas, sondern um dieses hier:
Ja sag mal wie **** bist du? Wie oft muss ich dir noch sagen das deine vorschläge sinnlos sind, auch wenn sie funktionieren. (Ich weiß es ist nur net gemeint.)
Eine solch direkte Beleidigung kann man sich sehr wohl verkneifen (zumal er sie selber zensiert hat - also hat er ja sogar drüber nachgedacht!).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da könnte jetzt aber auch "klug" rein passen. :o
BlackJack

@snafu: Das macht den Satz nicht wesentlich besser, denn dann wird die Klugheit des angesprochenen in Frage gestellt. Auch nicht wirklich nett. ;-)
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

@Hyperion das war des wegen weil ich schon geschrieben hatte das ich nichts für die Konsole Brauche, und ... (den rest kennt ihr ja schon)
Und das mit dem Zensieren war deswegen:
Dav1d hat geschrieben:braucht man deswegen nicht andere gleich beleidigen.
ich dachte ...

(Oh, noch ne frage währe es besser gewessen zu schreiben:
Wie begriffsstutzig bist du?
Ok, Da kann ich ihm auch nicht wirklich schuld geben.)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Die Beleidigung steht trotzdem im Raum.

Und mit Begriffsstutzigkeit hat das gar nicht zutun, denn seine Lösung ist eigentlich deiner Fragestellung entsprechend gut.
Nur halt ein "SimpleDialog" und für komplexere Sachen muss man sich halt selbst was schreiben.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Xynon1 hat geschrieben:Die Beleidigung steht trotzdem im Raum.

Und mit Begriffsstutzigkeit hat das gar nicht zutun, denn seine Lösung ist eigentlich deiner Fragestellung entsprechend gut.
Nur halt ein "SimpleDialog" und für komplexere Sachen muss man sich halt selbst was schreiben.
Aber das war es ja nicht was mich störte! Beim nächsten mal stell ich den Code gleich rein, und versuche das Problem genauer zu beschreiben, und dann wir das hoffentlich nicht nochmal passieren. Amen!!!
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Py-Prog hat geschrieben: Aber das war es ja nicht was mich störte! Beim nächsten mal stell ich den Code gleich rein, und versuche das Problem genauer zu beschreiben, und dann wir das hoffentlich nicht nochmal passieren. Amen!!!
Bei nächsten Mal unterlasse es einfach, andere Leute zu beleidigen ;-) Dann passt's schon.

@Problem:
Hast Du eigentlich mal meinen Beitrag hier gelesen?
http://www.python-forum.de/viewtopic.ph ... 37#p184237

Würde mich halt interessieren, ob Du das Problem mit der "Lösung" auch verstanden hast.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Hyperion hat geschrieben:Bei nächsten Mal unterlasse es einfach, andere Leute zu beleidigen ;-) Dann passt's schon.
Hatte noch vergessen dazu zu schreiben. (Aber nicht das ich das nicht tun soll!)
Hyperion hat geschrieben: @Problem:
Hast Du eigentlich mal meinen Beitrag hier gelesen?
http://www.python-forum.de/viewtopic.ph ... 37#p184237

Würde mich halt interessieren, ob Du das Problem mit der "Lösung" auch verstanden hast.
Ja, meine alte funktion hat ein Fenster erzeugt, und dann wars das, die funktion war beendet und für das Programm gab es keinen grund mehr 'zuwarten' und es erzeugte das zweite fenter. Die idee mit return ist mir selber auch schon gekommen aber da hatte ich's dann doch nicht geschaft. (Wie schon gesagt wenn die funktion None zurückgibt kann ich lang auf True warten.)

Code: Alles auswählen

zugang=False

def passwort():
   global passwortdb
   sicherheitsabfrage=tkinter.Tk()
   sicherheitsabfrage.title('Sicherheisabfrage')
   sicherheitsabfrage.geometry('230x100')
   tkinter.Label(sicherheitsabfrage, text='Name: ', pady=10).grid(row=0, column=0)
   tkinter.Label(sicherheitsabfrage, text='Passwort: ', pady=10).grid(row=1, column=0)
   Name=tkinter.Entry(sicherheitsabfrage)
   Passwort=tkinter.Entry(sicherheitsabfrage, show="*")
   Name.grid(row=0, column=1)
   Passwort.grid(row=1, column=1)
   def OK():
      global zugang
      name=Name.get()
      passwort=Passwort.get()
      if (name in passwortdb and passwortdb[name] == passwort):
         sicherheitsabfrage.destroy()
         zugang=True
      else:
         Name.delete(0, len(Name.get()))
         Passwort.delete(0, len(Passwort.get()))
         sicherheitsabfrage.destroy()
         zugang=False
   button1=tkinter.Button(sicherheitsabfrage, command=OK, text='OK').grid(row=2, column=1)
   tkinter.mainloop()

versuch=0
while True:
   passwort()
   if zugang:
      break
   versuch+=1
   if versuch>2:
      exit()
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Du hast Hyperion immer noch nicht verstanden.

Egal, wie du in Python eine Passwortabfrage schreibst, zumindest in der Form,
ist das nur
Hyperion hat geschrieben:rein kosmetischer Natur
.

Das heißt dies bietet dir Null, Nichst und überhaupt keinen Schutz, da es mit Zwei kleinen Änderungen im Script ausgehebelt wird.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten