Kan ni hjälpa mig med koden till detta i Python
Postat: 18 nov 2008, 22:46
Hejsan
Jag har suttit och lekt med wxGlade för att skapa en GUI till mitt lilla program. Kruxet är att jag inte vet hur jag anropar eller gör så att knappar och menyer får liv i GUI läget. Jag har gjort ett program som skall skapa lösenord och spara dessa till en textfil. Nu vill jag ha detta i ett GUI program men vet inte hur jag skall anropa mellan mina funktioner och knappar, textfält osv.
Jag lägger upp koden till GUI, mina nuvarande funktioner och hoppas på lite hjälp
Main:
passPWC
filePWC
errorPWC
textPWC
Och sist GUI koden
Jag har suttit och lekt med wxGlade för att skapa en GUI till mitt lilla program. Kruxet är att jag inte vet hur jag anropar eller gör så att knappar och menyer får liv i GUI läget. Jag har gjort ett program som skall skapa lösenord och spara dessa till en textfil. Nu vill jag ha detta i ett GUI program men vet inte hur jag skall anropa mellan mina funktioner och knappar, textfält osv.
Jag lägger upp koden till GUI, mina nuvarande funktioner och hoppas på lite hjälp
Main:
Kod: Markera allt
# Imported modules
import passPWC
import textPWC
# Main program
print '%s' % (textPWC.TEXT['valkommen'], )
print '%s' % (textPWC.TEXT['inledning'], )
passPWC.userMenu()
Kod: Markera allt
# Imported modules
import filePWC
import random
import textPWC
import errorPWC
# Defining and assigning variables and constants
# A block of functions
def createPassWord():
'''This function creates passwords
The functions takes one argument and creates
a password with all characters from the alfabeth
and some special signs along with numbers.
The argument states how many chars there is to
be created in the password.'''
# Create local variables
i = 0
f1 = []
# Use a while loop to create a password
nChars, nPasses = userInput()
if nPasses > 1:
while i < nPasses:
f1 = []
j = 0
while j < nChars:
f1.append(textPWC.TECKEN[random.randint(0, 79)])
j += 1
print '%s %s' % (textPWC.TEXT['utskrift'], ''.join(f1))
filePWC.fileSavePassWord(f1, nPasses, i, nChars)
i += 1
else:
print '%s %s' % (textPWC.TEXT['utskrift'], ''.join(f1))
filePWC.fileSavePassWord(f1, nPasses, i, nChars)
# Return to the usermenu
print '\n'
userMenu()
def userInput():
'''This function handles user input
The function takes two values from the user
and returning them to the calling function. We
also tries if the inputs are correct and usable
to the rest of the program.'''
# Create local variables
numSigns = None
numPasses = None
# Get the values from the user and check the inputs
print '%s' % (textPWC.TEXT['antal'], )
while True:
try:
numSigns = int(raw_input('>>> '))
if numSigns < 1:
raise errorPWC.shortInputOne(numSigns, 1)
except ValueError:
print '%s' % (textPWC.TEXT['generellt'], )
except errorPWC.shortInputOne, x:
print '%s' % (textPWC.TEXT['felAntal'], )
else:
break
print '%s' % (textPWC.TEXT['langd'], )
while True:
try:
numPasses = int(raw_input('>>> '))
if numPasses < 3:
raise errorPWC.shortInputThree(numPasses, 3)
except ValueError:
print '%s' % (textPWC.TEXT['generellt'], )
except errorPWC.shortInputThree, x:
print '%s' % (textPWC.TEXT['felLangd'], )
else:
break
# Return these values to the calling function
return numPasses, numSigns
def userExit():
'''This function quits the program
ttttt'''
print '%s' % (textPWC.TEXT['avslutKorrekt'], )
def userMenu():
'''This function prints a menu
This function prints a menu so the user can
make a choice and execute that choice. The
function doesnt need any argument.'''
# Define and assign local variables and constants
MENU_ITEMS = {'1' : createPassWord, '2' : filePWC.fileRead, '3' : userExit}
# Print the menu and catch the users menu choice
for i in ((1, 'Skapa en eller flera lösenord'),
(2, 'Skriv ut filen med lösenorden'),
(3, 'Avsluta programmet')):
print '%i: %s' % i
while True:
menuChoice = raw_input('Ange menyval, tryck enter: ')
if menuChoice == '1' or menuChoice == '2' or menuChoice == '3':
MENU_ITEMS[menuChoice]()
break
else:
print '%s' % (textPWC.TEXT['felmenu'], )
Kod: Markera allt
# Imported modules
import pwd
import os
from time import localtime, strftime
import textPWC
import passPWC
# Defining and assigning variables and constants
SOURCE = pwd.getpwuid(os.getuid())[5] + os.sep + 'Passwordlist.pwc'
global SOURCE
# A block of functions
def fileRead():
'''This function reads a file and prints it
mmmmm'''
# Read the content of the file and print it
try:
f = open(SOURCE, 'ru')
try:
for line in f:
print '%s' % line,
finally:
f.close()
passPWC.userMenu()
except IOError:
print '%s' % (textPWC.TEXT['fileError'], )
def fileSavePassWord(f1, nPasses, i, nChars):
'''This function save the password to a file
The function takes three arguments which is
a list created by the function createPassWord,
a counter and the value of how many password.
The file is saved as a textfile and it contains
every password created over time.'''
# Save the content of the list and close the file
try:
f = open(SOURCE, 'au')
try:
if i == 0:
f.write(textPWC.TEXT['overskrift'])
f.write(str(nChars))
f.write(' tecken, den ')
f.write(strftime("%d %b %Y, tidpunkt %H:%M\n"))
f.write(''.join(f1))
f.write('\n')
if (i + 1) == nPasses:
f.write('\n')
finally:
f.close()
except IOError:
print '%s' % (textPWC.TEXT['fileError'], )
Kod: Markera allt
# Huvudprogrammet
class shortInputOne(Exception):
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
class shortInputThree(Exception):
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
Kod: Markera allt
# Defining and assigning variables and constants
TECKEN = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '#', '%', '&', '(', ')', '=', '?', '+', '*', '@', '$', '£', '{', '[', ']', '}', '/')
TEXT = {'valkommen' : 'Välkommen till ZerQs Password creator',
'inledning' : 'Detta program skapar ett lösenord som är baserat på alla \ntecken i alfabetet samt specialtecken.',
'antal' : 'Vänligen mata in hur många lösenord du vill skapa, avsluta med enter.',
'langd' : 'Vänligen mata in antal tecken som lösenordet skall bestå av, avsluta med enter.',
'overskrift' : 'Följande lösenord har skapats med ',
'utskrift' : 'Följande lösen har skapats: ',
'felAntal' : 'Du har angett ett för litet tal, vänligen mata in ett nytt och avsluta med enter!',
'felLangd' : 'Du har angett ett för lågt tal i längden på lösenordet, minium är 3 tecken, ange ett nytt!',
'generellt' : 'Du har antagligen angett ett tecken istället för en siffra, skriv en siffra denna gång istället',
'avslutKorrekt' : 'Tack för att ni har använt Zerq''s Password creator V0.3',
'avslutFel' : 'Ja det har man ju kunnat tänka sig, du måste skriva fel på slutet. Programmet avslutas ändå, Tack!',
'run' : 'Vill du skapa flera lösenord? j/J för ja eller n/N för att avsluta!',
'filOverskrift' : 'Vill du använda default filen "Passwordlist.txt" eller vill du ange en egen fil, d = default, e = egen fil!',
'angeFil' : 'Skriv in namnet på filen du vill skapa, avsluta med enter.',
'felmenu' : 'Du har angivit ett felaktigt menyval, försök igen, 1, 2 eller 3.',
'fileError' : 'Filen finns inte, du kan inte spara lösenorden...',
'fileChoice' : 'Välj vilken fil du vill använda, skriv in filens namn med eller utan .pwc'}
Kod: Markera allt
# generated by wxGlade 0.6.3 on Tue Nov 18 20:21:07 2008
import wx
# begin wxGlade: extracode
# end wxGlade
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX
wx.Frame.__init__(self, *args, **kwds)
# Menu Bar
self.frame_1_menubar = wx.MenuBar()
wxglade_tmp_menu = wx.Menu()
wxglade_tmp_menu.Append(wx.NewId(), "Avsluta", "", wx.ITEM_NORMAL)
self.frame_1_menubar.Append(wxglade_tmp_menu, "Arkiv")
wxglade_tmp_menu = wx.Menu()
wxglade_tmp_menu.Append(wx.NewId(), "Om programmet", "", wx.ITEM_NORMAL)
self.frame_1_menubar.Append(wxglade_tmp_menu, u"Hjälp")
self.SetMenuBar(self.frame_1_menubar)
# Menu Bar end
self.frame_1_statusbar = self.CreateStatusBar(1, 0)
self.label_1 = wx.StaticText(self, -1, u"Välj antal lösenord som skall skapas.")
self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "0", min=1, max=1000)
self.label_2 = wx.StaticText(self, -1, u"Välj antal tecken i lösenordet.")
self.spin_ctrl_2 = wx.SpinCtrl(self, -1, "0", min=3, max=250)
self.checkbox_1 = wx.CheckBox(self, -1, u"Vill du spara lösenorden till en fil?")
self.static_line_1 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
self.button_2 = wx.Button(self, -1, u"Skapa lösenord")
self.button_3 = wx.Button(self, -1, "Avsluta")
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle("ZerQ's Password Creator")
self.SetSize((368, 195))
self.frame_1_statusbar.SetStatusWidths([-1])
# statusbar fields
frame_1_statusbar_fields = [u"Inga lösenord är skapade "]
for i in range(len(frame_1_statusbar_fields)):
self.frame_1_statusbar.SetStatusText(frame_1_statusbar_fields[i], i)
self.button_2.SetMinSize((115, 32))
self.button_3.SetMinSize((115, 32))
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
sizer_6 = wx.BoxSizer(wx.VERTICAL)
sizer_3 = wx.BoxSizer(wx.VERTICAL)
sizer_3.Add((240, 10), 0, 0, 0)
sizer_3.Add(self.label_1, 0, 0, 0)
sizer_3.Add(self.spin_ctrl_1, 0, 0, 0)
sizer_3.Add((240, 10), 0, 0, 0)
sizer_3.Add(self.label_2, 0, 0, 0)
sizer_3.Add(self.spin_ctrl_2, 0, 0, 0)
sizer_3.Add((240, 10), 0, 0, 0)
sizer_3.Add(self.checkbox_1, 0, 0, 0)
sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0)
sizer_6.Add((125, 60), 0, 0, 0)
sizer_6.Add(self.button_2, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer_6.Add((125, 10), 0, 0, 0)
sizer_6.Add(self.button_3, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
sizer_6.Add((125, 10), 0, 0, 0)
sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
sizer_2.Add(sizer_5, 0, wx.EXPAND, 0)
sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade
# end of class MyFrame
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()