Seite 2 von 3

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 19:11
von Xynon1
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".

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 19:22
von nomnom
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)

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 19:25
von Py-Prog
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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 19:33
von Xynon1
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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 19:43
von Py-Prog
Habs jetzt geschaft, Danke.
Da kann ich lange mit if rumprobieren wenn die funktion None zurückgibt ... :roll:

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 21:08
von Hyperion
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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 22:14
von Xynon1
@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()

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 22:52
von nomnom
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!

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 23:09
von Hyperion
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 ;-)

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 23:16
von Xynon1
: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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 23:39
von snafu
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) ;)

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Freitag 5. November 2010, 23:48
von Hyperion
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!).

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Samstag 6. November 2010, 04:29
von snafu
Da könnte jetzt aber auch "klug" rein passen. :o

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Samstag 6. November 2010, 10:00
von BlackJack
@snafu: Das macht den Satz nicht wesentlich besser, denn dann wird die Klugheit des angesprochenen in Frage gestellt. Auch nicht wirklich nett. ;-)

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Samstag 6. November 2010, 20:47
von Py-Prog
@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.)

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Sonntag 7. November 2010, 08:48
von Xynon1
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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Montag 8. November 2010, 16:20
von Py-Prog
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!!!

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Montag 8. November 2010, 17:19
von Hyperion
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.

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Dienstag 9. November 2010, 14:51
von Py-Prog
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()

Re: Passwort abfragen befor das Programm gestartet wird

Verfasst: Dienstag 9. November 2010, 15:19
von Xynon1
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.