Seite 1 von 1

kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 16:29
von alpha
Hallo Leute,

ich steh grad völlig auf dem Schlauch. Ich habe schon einige TK-Programme geschrieben aber folgendes macht mir Probleme:

Code: Alles auswählen

from Tkinter import *
import hashlib

class Control:
    def __init__(self, mf):
        self.mf = mf
        self.__createGui()

    def __createGui(self):
        print self.mf 
        self.lblDate = Label(self.mf, text="Date:", width=15, anchor=E).grid(row=0, column=0)
        self.etyDate = Entry(self.mf, width=40).grid(row=0, column=1)     
        print self.etyDate
        
        self.lblProjectNbr = Label(self.mf, text="Projectnumber", width=15, anchor=E).grid(row=1, column=0)
        self.etyProjectNbr = Entry(self.mf, width=40).grid(row=1, column=1)
        
        self.btnCreatePassword = Button(self.mf, text = "Create password", command=self._CreatePassword).grid(row=2, column=0)
        
        self.lblPassword = Label(self.mf, text = "Password:", width=15, anchor=E).grid(row=3, column=0)
        self.etyPassword = Entry(self.mf, width=40).grid(row=3, column=1)
        

    def _CreatePassword(self):
        print("password")
        m = hashlib.md5()
       
        m.update(str(self.etyDate.get()))
        m.update(str(self.etyProjectNbr.get()))
        self.etyPassword = m.hexdigest()
        
        
        
if __name__ == '__main__':
    mf = Tk()
    #feld=Toplevel(root)
    c = Control(mf)
    #d = Control(mf, "a", "b")
    mf.mainloop() 


und zwar bekomme ich kein Objekt für

Code: Alles auswählen

print self.etyDate
das ist doch eigentlich garnicht möglich. Bitte helft mir.. ich such schon 3 Stunden.

Danke und Gruß
alpha

Re: kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 16:57
von yipyip
...ich hab 5 Sekunden gebraucht.

"grid()" gibt "None" zurück!
Schreibe mal

Code: Alles auswählen

self.etyDate = Entry(self.mf, width=40)
self.etyDate.grid(row=0, column=1)    
Ebenso bei den anderen Aufrufen.

:wink:
yipyip

Re: kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 16:58
von numerix
alpha hat geschrieben:Ich habe schon einige TK-Programme geschrieben
Wie die ausgesehen haben, möchte ich lieber nicht wissen ...

Zum einen ist dein Code außerordentlich ungewöhnlich aufgebaut, um es einmal milde auszudrücken.
Wenn du mal die einschlägige Doku zu Tkinter anguckst, wirst du zahlreiche Beispiele dafür finden, wie der Grundaufbau aussehen könnte.

Zu deinem konkreten Problem: Ein Aufruf von Entry().grid() liefert keine Instanz von Entry, sondern der Rückgabewert der grid()-Methode. Der ist None. Das bekommst du zurück.

Re: kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 17:51
von alpha
Danke YipYip,

so ist es wenn man mal was anderes ausprobiert :-)
Normalerweise mach ich es auch so.. dachte ich spar ne Zeile.. da sieht man was man davon hat.

@Numerix
Danke für die Beleidigung. Ich habe mir schon etliche Tkinterprogramme angeschaut, und ne einheitliche Linie gibts da schon mal gar nicht.

über

Code: Alles auswählen

from Tkinter import *
kann man sich freilich streiten.
Habe auch schon eine Klasse erstellt, die von Tkinter erbt.. aber schöner ist das auch nicht.

Code: Alles auswählen

self.__createGui()
könnte ich mir schenken.. auch klar.. ich war nur mit der zeit so verzweifelt allen möglichen mist zu probieren.
Ging Dir nach einem 10h tag bestimmt noch nie so :(

nerft wirklich wenn man mit 20 Zeilen code hier bewertet wird.

Gruß
alpha

Re: kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 18:10
von numerix
alpha hat geschrieben:@Numerix
Danke für die Beleidigung.
Na, du bist aber sehr dünnhäutig. Von "Beleidigung" war das noch weit entfernt.
alpha hat geschrieben:Ich habe mir schon etliche Tkinterprogramme angeschaut, und ne einheitliche Linie gibts da schon mal gar nicht.
Das habe ich auch nicht behauptet, aber der Aufbau deines Codes ist schon sehr besonders.
alpha hat geschrieben:nerft wirklich wenn man mit 20 Zeilen code hier bewertet wird.
Wenn man seinen Code hier postet, muss man das schon aushalten können. Geht mir auch nicht anders ...

Re: kein Handle für widgets

Verfasst: Mittwoch 8. September 2010, 22:01
von alpha
@numerix

Sorry, war ein langer Tag. Das das Progrämmchen nicht der Weisheit letzter Schluss ist, ist mir auch klar.
Ich wäre nur dankbar für konkrete Verbesserungsvorschläge.

So siehts jetzt aus.. ist auch jetzt nur ein Demo für meinen Chef aber das Design ist schöner :-D

Code: Alles auswählen

import Tkinter as tk
import hashlib

class CryptGui:
    def __init__(self):
        self.mf = tk.Tk()
        self.mf.title("crypt")
        self.mf.resizable(False, False)
        
        self.lblDate = tk.Label(self.mf, text="Date:", width=15, anchor=tk.E)
        self.lblDate.grid(row=0, column=0)
        self.etyDate = tk.Entry(self.mf, width=40)
        self.etyDate.grid(row=0, column=1)    
       
        self.lblProjectNbr = tk.Label(self.mf, text="Projectnumber", width=15, anchor=tk.E)
        self.lblProjectNbr.grid(row=1, column=0)
        self.etyProjectNbr = tk.Entry(self.mf, width=40)
        self.etyProjectNbr.grid(row=1, column=1)

        self.btnCreatePassword = tk.Button(self.mf, text = "Create password", command=self._CreatePassword)
        self.btnCreatePassword.grid(row=2, column=0)

        self.lblPassword = tk.Label(self.mf, text = "Password:", width=15, anchor=tk.E)
        self.lblPassword.grid(row=3, column=0)
        self.etyPassword = tk.Entry(self.mf, width=40)
        self.etyPassword.grid(row=3, column=1)

        self.mf.mainloop()


    def _CreatePassword(self):
        m = hashlib.md5(
        m.update(str(self.etyDate.get()))
        m.update(str(self.etyProjectNbr.get()))
        self.etyPassword.delete(0, tk.END)
        self.etyPassword.insert(0, m.hexdigest())
       

if __name__ == '__main__':
    c = CryptGui()

Jetzt kannst loslegen ;-)

Grüße
alpha