Permalänk
Medlem

Mitt första försök i Python

Hejsan.

Har gett mig in på att lära mig Python, har tidigare provat andra programmeringsspråk som C++, men inte kommit särskilt långt eller gett upp efter en bit på vägen.

Men med Python är det annorlunda, det har jag fått lite grepp om och har under kvällen suttit och knåpat ihop ett litet krypteringsprogram som gör om en vanlig textsträng till md5.

Programmet är väldigt enkelt upplagd (utseendemässigt), ett fönster, två fält (ett att skriva in i och ett där resultatet kommer fram). Två knappar, Convert och Info/About.

Som sagt, mitt första försök. Kan tyvärr inte få upp programmet som .py någonstans då jag inte har tillgång till ftp just nu men här är koden, vore tacksam om någon som är kunnig inom språket ville titta på den, eventuellt ta en titt på programmet när det körs och lämna några kommentarer.

Tack på förhand // Janols.

edit: Ska tilläga att jag använda Tkinter för grafiskt upplägg, samt en md5 modul för att göra om koden, om någon mot förmodan missar det i koden, over and out.

#!/usr/local/bin/Python from Tkinter import * #...import Tkinter (GUi) import md5 #...import md5 module for password decryption def GetValue(): md5c = md5.new( entryA.get() ).hexdigest() entryB.insert(0,md5c) def GetAbout(): labelA['text'] = "V1.0 > http://janolsorg.scorpionshops.com/" buttonB['text'] = "How-to" buttonB['command'] = HideAbout def HideAbout(): labelA['text'] = "Enter string in top box and press CONVERT" buttonB['text'] = "About" buttonB['command'] = GetAbout def setBoard(aType,aString): w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(aType,aString) w.CloseClipboard() root = Tk() frameTop = Frame(root, width=300, height=50, background="#444343") entryA = Entry(frameTop, width=26, insertwidth=7, background="#05dd75", font="fixedsys") buttonA = Button(frameTop, width=10, background="#000000", foreground="#CCCCCC", text="Convert", activebackground="#012b17", activeforeground="#ffffff", command=GetValue) frameMiddle = Frame(root, width=300, height=50, background="#444343") entryB = Entry(frameMiddle, width="36", insertwidth=7, background="#05dd75", font="fixedsys") frameBottom = Frame(root, width=300, height=100, background="#444343") buttonB = Button(frameBottom, width=10, text="About", background="#000000", foreground="#CCCCCC", activebackground="#012b17", activeforeground="#ffffff", command=GetAbout) labelA = Label(frameBottom, background="#444343" ,foreground="#05dd75", text="Enter string in top box and press CONVERT") frameTop.pack() entryA.pack(side="left", pady=5, padx=5) buttonA.pack(side="left", pady=5, padx=5) frameMiddle.pack() entryB.pack(side="left", pady=5, padx=5) frameBottom.pack(anchor="n", side="top") buttonB.pack(anchor="w", side="left", pady=5, padx=11) labelA.pack(side="left") frameBottom.pack(anchor="n", side="top") root.mainloop()

Permalänk
Medlem

En bra idé brukar vara att försöka hålla sina rader kortare än 80 tecken, dvs tex stoppa in lite enterslag:

buttonA = Button(frameTop, width=10, background="#000000", foreground="#CCCCCC", text="Convert", activebackground="#012b17", activeforeground="#ffffff", command=GetValue)

Hittade en bugg oxå, testa o försök konvertera ett specialtecken, tex ¯

Permalänk
Medlem

Ok, ska tänka på detta med max 80 tecken.

Har letat lite överallt för att få lite mer info om hur man får special-tecken att fungera men verkar inte hitta något, du vet inte om det finns någon inbyggd funktion i md5-modulen eller måste jag hitta någon ytterligare modul ?.

edit: Å, Ä & Ö fungerar inte heller, mysko-pysko... kom gärna med tips ni som kan ...

edit2: Tänkte lägga till funktionen "Copy-to-Clipboard", dvs md5-hash kopieras till clipboard så man bara behöver "pastea" den. Hittade följande funktion efter lite googlande.

import win32clipboard w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(text) w.CloseClipboard()

Men den säger bara "ImportError: No module named win32clipboard", måste man ladda ner denna modul eller något sådant ?...

Permalänk
Medlem

Japp, win32-modulerna är inte med som standard. Dom finns här:
http://starship.python.net/crew/mhammond/win32/Downloads.html

Det andra felet verkar bero på att TKInter gör om strängen till unicode om det är något tecken typ å med i strängen. Tror du kan fixa det genom att göra såhär i getValue():

s = entryA.get().encode('utf-8', 'replace') md5c = md5.new( s ).hexdigest() entryB.insert(0,md5c)

Jag har inte använt unicode i python tidigare, men det fungerade när jag testade iaf
Du kan läsa lite om unicode här:
http://www.amk.ca/python/howto/unicode

Permalänk
Medlem

Tack, din lilla kodsnutt gjorde det mycket bättre, nu funkar Å, Ä, Ö samt specialtecken!. Behöver dock hjälp med en liten sak till, jag laddade ner modulen pywin32-208.win32-py2.4.exe från hemsidan du gav mig (projektet var dock flyttat till SourceForge.net så laddade därifrån).

När filen är nere, vad gör jag med den då?. Jag provade starta den, men får bara felmeddelande, antar att man ska placera den i någon speciell katalog, any idéa? ...

Tack för hjälpen btw, uppskatts mycket!.

Permalänk
Medlem

Jag har inte använt eller installerat pywin32 någon gång så jag kan inte hjälpa så mycket. I vanliga fall brukar det bara vara att köra filen osså funkar det direkt. Dock ser jag en sak, vilken version av python har du? Den filen som du tankade är för 2.4.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vb
Jag har inte använt eller installerat pywin32 någon gång så jag kan inte hjälpa så mycket. I vanliga fall brukar det bara vara att köra filen osså funkar det direkt. Dock ser jag en sak, vilken version av python har du? Den filen som du tankade är för 2.4.

Jag kör Python 2.4, så det borde vara rätt.
Wierd.

Btw, några tips på vad man kan ha som nästa projekt ? ...

edit: Laddade om PyWin32 på nytt och nu fungerade det, har även fått copy-to-clipboard funktionen att fungera. Några tips på något mer som detta lilla programmet kan innehålla ?.

Här är koden, programmet börjar kännas klart nu men om ni har tips på något som kan göra det bättre så hojta till!.

#!/usr/local/bin/Python #...md5-converter v1.2 from Tkinter import * #...import Tkinter (GUi) import md5 #...import md5 module for password decryption import win32clipboard #...import module for copy-to-clipboard function def GetValue(): s = entryA.get().encode('utf-8', 'replace') #...encodes entry to utf-8 md5c = md5.new( s ).hexdigest() #...convert entry to md5 entryB.delete(0,END) #...delete old entry (if there is one) entryB.insert(0,md5c) #...insert new md5-string in textbox win32clipboard.OpenClipboard() #... Copy-to-clipboard function starts. win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText(md5c) win32clipboard.CloseClipboard() #... function ends. def GetAbout(): labelA['text'] = "V1.1 > http://janolsorg.scorpionshops.com/" buttonB['text'] = "How-to" buttonB['command'] = HideAbout def HideAbout(): labelA['text'] = "Enter string in top box and press CONVERT" buttonB['text'] = "About" buttonB['command'] = GetAbout root = Tk() frameTop = Frame(root, width=300, height=50, background="#444343") entryA = Entry(frameTop, width=26, insertwidth=7, background="#05dd75", font="fixedsys") buttonA = Button(frameTop, width=10, background="#000000", foreground="#CCCCCC", text="Convert", activebackground="#012b17", activeforeground="#ffffff", command=GetValue) frameMiddle = Frame(root, width=300, height=50, background="#444343") entryB = Entry(frameMiddle, width="36", insertwidth=7, background="#05dd75", font="fixedsys") frameBottom = Frame(root, width=300, height=100, background="#444343") buttonB = Button(frameBottom, width=10, text="About", background="#000000", foreground="#CCCCCC", activebackground="#012b17", activeforeground="#ffffff", command=GetAbout) labelA = Label(frameBottom, background="#444343" ,foreground="#05dd75", text="Enter string in top box and press CONVERT") frameTop.pack() entryA.pack(side="left", pady=5, padx=5) buttonA.pack(side="left", pady=5, padx=5) frameMiddle.pack() entryB.pack(side="left", pady=5, padx=5) frameBottom.pack(anchor="n", side="top") buttonB.pack(anchor="w", side="left", pady=5, padx=11) labelA.pack(side="left") frameBottom.pack(anchor="n", side="top") root.mainloop()