コード例 #1
0
class Application:
    '''Creates a GUI to interact with.'''
    def __init__(self,master):
        '''Initializes the GUI.'''
        self.crypt=''
        self.encrypt='e'
        self.orig=''
        self.shif=StringVar()
        self.mult=StringVar()
        self.code=StringVar()

        master.title("Crypt")
	self.makeMenuBar(master)

        top_frame = Frame(master)
        top_frame.pack(fill=X, expand=1)

        self.label =Label(top_frame, text='Enter a code here or open a file:')
        self.label.pack(side=LEFT)

        self.go=Button(top_frame, text="Ok",command=self.code_to_file,default=ACTIVE)
        self.go.pack(side=RIGHT)
        self.entry = Entry(top_frame, width=50, textvariable=self.code)
        self.entry.pack(side=RIGHT)


	self.mainPart = Text(master,
			background = 'white',
			padx = 20,
			pady = 20)
	self.mainPart.pack(fill = 'both', expand = 1)
        mid_frame = Frame(master)
        mid_frame.pack(fill=X, expand=1)
        

        bottom_frame = Frame(master)

        bottom_frame.pack(fill=X,expand=1)
        self.shift_button = Button(mid_frame, text="Shift Substitution:\nC=P+b", command=self.shift) 
        self.shift_button.pack(side=LEFT,fill=X)
        
        self.multi_button = Button(mid_frame, text="Multiplicative Substitution:\nC=mP", command=self.multi) 
        self.multi_button.pack(side=RIGHT,fill=X)


        self.v=StringVar()
        self.v.set('e')
        self.encrypt_button = Radiobutton(mid_frame, text="Encrpyt", variable=self.v,value='e',command=self.en) 
        self.encrypt_button.pack(anchor=S)
        self.encrypt_button = Radiobutton(mid_frame, text="Decrpyt",variable=self.v,value='d',command=self.en) 
        self.encrypt_button.pack(anchor=S)
        Label(text='Amount to Shift(b)').pack(side=LEFT)
        self.shift_entry=Entry(bottom_frame,textvariable=self.shif,justify=CENTER)
        self.shift_entry.pack(side=LEFT)
        self.shift_entry.insert(ANCHOR,'1')
        Label(text='Amount to Multiply(m)').pack(side=RIGHT)
        self.mult_entry=Entry(bottom_frame,textvariable=self.mult,justify=CENTER)
        self.mult_entry.pack(side=RIGHT)
        self.mult_entry.insert(ANCHOR,'3')

        self.affine_button = Button(bottom_frame, text="Affine Substitution:\nC=mP+b", command=self.affine) 
        self.affine_button.pack(side=BOTTOM,fill=X)
        
        self.letterfrequency=Button(master, text='Display Letter Frequency', command=self.letters)
        self.letterfrequency.pack(side=BOTTOM)
        self.entry.bind('<Return>', self.code_to_file)


    def code_to_file(self,*args):
        g = open('tmp.txt', "w")
        g.write(self.code.get())
        g.close()
        self.crypt=Crypt('tmp.txt')
        os.remove('tmp.txt')
        self.orig=self.crypt.get_message()
        self.mainPart.delete(0.0,self.mainPart.index(END))
        self.mainPart.insert("%d.%d" % (0, 0),self.crypt)
        self.mainPart.insert("%d.%d" % (0, 0),'\n')

    def makeMenuBar(self,frame):
        menubar = Frame(frame,relief=RAISED,borderwidth=1)
        menubar.pack(fill=X)
		
        mb_file = Menubutton(menubar,text='File')
        mb_file.pack(side=LEFT)
        mb_file.menu = Menu(mb_file)
        mb_file.menu.add_command(label="Load a file", command=self.get_file)
        mb_file.menu.add_command(label="Save", command=self.save_file)
        mb_file.menu.add_command(label='Quit', command=quit)
        
#		mb_edit = Menubutton(menubar,text='edit')
#		mb_edit.pack(side=LEFT)
#		mb_edit.menu = Menu(mb_edit)
#		mb_edit.menu.add_command(label='copy')
#		mb_edit.menu.add_command(label='paste')
		
        mb_help = Menubutton(menubar,text='Help')
        mb_help.pack(padx=25,side=RIGHT)
        mb_help.menu = Menu(mb_help)
        mb_help.menu.add_command(label="Instructions", command=self.help)

        mb_file['menu'] = mb_file.menu
        mb_help['menu'] = mb_help.menu

    def help(self):
        print 'TO BE MADE. POP UP HELP'

    def en(self):
        self.encrypt=self.v.get()

    def get_file(self):
        filename = askopenfilename(filetypes=[("Code files","*.txt"),("All files","*")])
        self.crypt=Crypt(filename)
        self.orig=self.crypt.get_message()
        self.mainPart.delete(0.0,self.mainPart.index(END))
        self.mainPart.insert("%d.%d" % (0, 0),self.crypt) 
        self.mainPart.insert("%d.%d" % (0, 0),'\n')
    
    def save_file(self):
        filename = asksaveasfilename(filetypes=[("Code files","*.txt"),("All files","*")])
        g = open(filename, "w")
        g.write(self.crypt.get_message())
        g.close()

    def shift(self):
        if self.crypt!='':
            self.crypt.shift(int(self.shif.get()), self.encrypt)
            self.mainPart.delete(0.0,self.mainPart.index(END))
            self.mainPart.insert("%d.%d" % (0, 0),self.orig)
            self.mainPart.insert("%d.%d" % (0, 0),'\n')
            self.mainPart.insert(0.0,self.crypt)

    def multi(self):
        if self.crypt!='':
            if int(self.mult.get())%2!=0 and int(self.mult.get())!=13:
                self.crypt.multiply(int(self.mult.get()), self.encrypt)
                self.mainPart.delete(0.0,self.mainPart.index(END))
                self.mainPart.insert("%d.%d" % (0, 0),self.orig)
                self.mainPart.insert("%d.%d" % (0, 0),'\n')
                self.mainPart.insert(0.0,self.crypt)

    def affine(self):
        if self.crypt!='':
            if int(self.mult.get())%2!=0 and int(self.mult.get())!=13:
                self.crypt.affine(int(self.shif.get()),int(self.mult.get()), self.encrypt)
                self.mainPart.delete(0.0,self.mainPart.index(END))
                self.mainPart.insert("%d.%d" % (0, 0),self.orig)
                self.mainPart.insert("%d.%d" % (0, 0),'\n')
                self.mainPart.insert(0.0,self.crypt)

    def letters(self):
        if self.crypt!='':
            self.crypt.letter_frequency()