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".
Passwort abfragen befor das Programm gestartet wird
Hast du ja (fast, als Thread-Titel):Py-Prog hat geschrieben: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:Leonidas hat geschrieben: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.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.)
Ich würde gerne eine Passwort abfage in ein Programm einbauen, wie krieg ich sowas hin?
Passwort abfragen befor das Programm gestartet wird
(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.nomnom hat geschrieben: (Klar habe ich auch den Thread gelesen, aber nicht verstanden was du genau erreichen willst)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
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.
aber das Thema ist eindeutig Tkinter bezogen und diese Information wäre von Anfang an sehr nützllich gewesen.
Habs jetzt geschaft, Danke.
Da kann ich lange mit if rumprobieren wenn die funktion None zurückgibt ...
Da kann ich lange mit if rumprobieren wenn die funktion None zurückgibt ...
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dir ist aber schon klar, dass das absolut nichts bringt? (Zumindest nicht auf diesem Wege)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).
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
assert encoding_kapiert
@Py-Prog
Ich hatteeigentlich an so etwas gedacht
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()
Ack! Full Ack!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.
- 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:
Vielleicht ist es dem OP ja schon klar, aber falls nicht, macht es der Code jetzt noch mal deutlich
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()
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
wusste ich echt noch nicht!
ä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.
ä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.
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)nomnom hat geschrieben:Ack! Full Ack!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.
- 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:
Eine solch direkte Beleidigung kann man sich sehr wohl verkneifen (zumal er sie selber zensiert hat - also hat er ja sogar drüber nachgedacht!).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.)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@snafu: Das macht den Satz nicht wesentlich besser, denn dann wird die Klugheit des angesprochenen in Frage gestellt. Auch nicht wirklich nett.
@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:
(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.)
Und das mit dem Zensieren war deswegen:
ich dachte ...Dav1d hat geschrieben:braucht man deswegen nicht andere gleich beleidigen.
(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.
Wer Rechtschreibfehler findet darf sie behalten.
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.
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!!!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.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Wer Rechtschreibfehler findet darf sie behalten.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bei nächsten Mal unterlasse es einfach, andere Leute zu beleidigen Dann passt's schon.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!!!
@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
assert encoding_kapiert
Hatte noch vergessen dazu zu schreiben. (Aber nicht das ich das nicht tun soll!)Hyperion hat geschrieben:Bei nächsten Mal unterlasse es einfach, andere Leute zu beleidigen Dann passt's schon.
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.)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.
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.
Wer Rechtschreibfehler findet darf sie behalten.
Du hast Hyperion immer noch nicht verstanden.
Egal, wie du in Python eine Passwortabfrage schreibst, zumindest in der Form,
ist das nur
Das heißt dies bietet dir Null, Nichst und überhaupt keinen Schutz, da es mit Zwei kleinen Änderungen im Script ausgehebelt wird.
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.