Har skrivit en enklare program i Python 3.4 som tar fram lösenord, detta är gjort med en Klass och metoder i klassen. Detta fungerar bra och allting skrivs ut både till python shellen och till filen, se kod nedan:
Kod: Markera allt
# Password program using classes
# imported modules
import os, time
import random as R
import datetime as DT
# Stativ variabes used
spList = [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 64,
91, 92, 93, 94, 95, 123, 124, 125, 126]
# Class definitions
class Password:
'''This class creates an password object'''
def __init__(self, length, numbersVal, specialVal, labelVal, label):
self.lth = length
self.nrVal = numbersVal
self.spVal = specialVal
self.lbVal = labelVal
self.label = label
def createPass(self):
self.passList = []
iterator = 1
while(iterator <= int(self.lth)):
r = R.randrange(1, 4)
if(r == 1 and self.nrVal == 1):
self.passList.append(self.numbersAdd())
elif(r == 2 and self.spVal == 1):
self.passList.append(self.specialAdd())
elif(r == 3):
self.passList.append(self.charsAdd())
if(iterator <= len(self.passList)):
iterator += 1
return self.passList
def numbersAdd(self):
return R.randrange(0, 9)
def specialAdd(self):
return chr(spList[R.randrange(0, 31)])
def charsAdd(self):
r1 = chr(R.randrange(97, 123))
r2 = chr(R.randrange(65, 91))
r3 = R.randrange(1, 3)
if(r3 == 1):
return r1
elif(r3 == 2):
return r2
else:
print("Nu vart det fel...")
def writeToFile(self):
f = open("pwd-lista.txt", "a")
d = DT.datetime.now()
f.write("\nSkapat den ")
f.write("{:%Y-%m-%d klockan: %H:%M:%S}, ".format(d))
if(p.lbVal == 1):
f.write("Lösenord till ")
f.write(p.label)
f.write(": ")
for i in range(len(p.passList)):
f.write(str(p.passList[i]))
f.close()
# Main loop code
p = Password(10, 1, 1, 1, "Harlem shaker")
print(p.createPass())
print(p.passList)
p.writeToFile()
Gui körs som det skall, knappar, textrutor och checkboxar fungerar som det skall. Dock inte min Password klass

Kod: Markera allt
# Password program using classes and GUI TKinter
# Import modules
import os, time
import random as R
import datetime as DT
from tkinter import *
from tkinter import ttk
# Static variables
spList = [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 58, 59, 60, 61, 62, 63, 64,
91, 92, 93, 94, 95, 123, 124, 125, 126]
# Class definitions
class Password:
'''This class creates an password object'''
def __init__(self, length, numbersVal, specialVal, labelVal, label):
self.lth = length
self.nrVal = numbersVal
self.spVal = specialVal
self.lbVal = labelVal
self.label = label
def createPass(self):
self.passList = []
iterator = 1
while(iterator <= self.lth):
r = R.randrange(1, 4)
if(r == 1 and self.nrVal == 1):
self.passList.append(self.numbersAdd())
elif(r == 2 and self.spVal == 1):
self.passList.append(self.specialAdd())
elif(r == 3):
self.passList.append(self.charsAdd())
if(iterator <= len(self.passList)):
iterator += 1
return self.passList
def numbersAdd(self):
return R.randrange(0, 9)
def specialAdd(self):
return chr(spList[R.randrange(0, 31)])
def charsAdd(self):
r1 = chr(R.randrange(97, 123))
r2 = chr(R.randrange(65, 91))
r3 = R.randrange(1, 3)
if(r3 == 1):
return r1
elif(r3 == 2):
return r2
def writeToFile(self):
f = open("pwd-lista.txt", "a")
d = DT.datetime.now()
f.write("\nSkapat den ")
f.write("{:%Y-%m-%d klockan: %H:%M:%S}, ".format(d))
if(p.lbVal == 1):
f.write("Lösenord till ")
f.write(p.label)
f.write(": ")
for i in range(len(p.passList)):
f.write(str(p.passList[i]))
f.close()
# Functions for TK widgets
def exitGUI():
root.destroy()
def clearWidgets(*args):
lengthOfPass_entry.delete(0, 7)
labelPass_entry.delete(0, 25)
numVal.set(0)
specVal.set(0)
labVal.set(0)
def createPassObject(*args):
lth = int(lengthOfPass.get())
nVal = numVal.get()
sVal = specVal.get()
lVal = labVal.get()
lb = labelPass.get()
p = Password(lth, nVal, sVal, lVal, lb)
p.writeToFile()
# Define Tkinter frame
root = Tk()
root.title("ZerQ's Lösenords generator")
# These lines are for resizing frame
mainframe = ttk.Frame(root, padding = "3 3 12 12")
mainframe.grid(column = 0, row = 0, sticky = (N, W, E, S))
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)
# Create and use textfields
lengthOfPass = IntVar()
labelPass = StringVar()
numVal = IntVar()
specVal = IntVar()
labVal = IntVar()
lengthOfPass_entry = ttk.Entry(mainframe, width = 6, textvariable = lengthOfPass)
lengthOfPass_entry.grid(column = 1, row = 0, sticky = W)
lengthOfPass_entry.delete(0, 10)
lengthOfPass_entry.insert(10, 8)
labelPass_entry = ttk.Entry(mainframe, width = 25, textvariable = labelPass)
labelPass_entry.grid(column = 0, row = 4, sticky = W)
labelPass_entry.insert(10, "Etikett...")
# Objekts in mainframe, buttons labels and checkboxes
ttk.Label(mainframe, text = "Antal tecken i lösenordet (4 till 255)?").grid(column = 0, row = 0, sticky = W)
ttk.Label(mainframe, text = "Siffror i lösenordet? ").grid(column = 0, row = 1, sticky = W)
numbersVal_checker = ttk.Checkbutton(mainframe, text = " Ja", variable = numVal).grid(column = 1, row = 1, sticky = W)
ttk.Label(mainframe, text = "Specialtecken i lösenordet? ").grid(column = 0, row = 2, sticky = W)
specialVal_checker = ttk.Checkbutton(mainframe, text = " Ja", variable = specVal).grid(column = 1, row = 2, sticky = W)
ttk.Label(mainframe, text = "Vill du ha en etikett för lösenordet? ").grid(column = 0, row = 3, sticky = W)
labelVal_checker = ttk.Checkbutton(mainframe, text = " Ja", variable = labVal).grid(column = 1, row = 3, sticky = W)
ttk.Button(mainframe, text = "Skapa lösen", command = createPassObject).grid(column = 6, row = 0, sticky = E)
ttk.Button(mainframe, text = "Rensa fält", command = clearWidgets).grid(column = 6, row = 1, sticky = E)
ttk.Button(mainframe, text = "Avsluta", command = exitGUI).grid(column = 6, row = 2, sticky = E)
for child in mainframe.winfo_children(): child.grid_configure(padx = 5, pady = 5)
lengthOfPass_entry.focus()
# Main loop
root.mainloop()#!/usr/bin/env python
Vad är fel? fattar inte, det är ju samma kod i båda fallen och det fungerar i ena utan gui't...Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
return self.func(*args)
File "/home/johnny/Dokument/Python/wxWidget/password-tinker.py", line 88, in createPassObject
p.writeToFile()
File "/home/johnny/Dokument/Python/wxWidget/password-tinker.py", line 62, in writeToFile
if(p.lbVal == 1):
NameError: name 'p' is not defined