示例#1
0
class Gui:
    def __init__(self, master, orden_rotores, iniciales_rotores,
                 plugboard_conexiones):
        self.win = master
        self.win.title("ENIGMA MACHINE")
        self.win.configure(bg=bgColor)
        self.machine = Maquina(orden_rotores, iniciales_rotores,
                               plugboard_conexiones)
        self.machine_enabled = False

        self.render_lamps()
        self.render_buttons()

        self.button_destroy_machine = Button(self.win,
                                             bg='white',
                                             borderwidth=0,
                                             text="Terminar maquina",
                                             command=self.terminar_maquina)
        self.button_destroy_machine.pack()

        self.win.mainloop()

    def terminar_maquina(self):
        self.win.destroy()

    def render_lamps(self):
        for keyboard in keyboard_letters:
            self.f = Frame(self.win)
            for button in keyboard:
                render = ImageTk.PhotoImage(
                    Image.open(pathLamps + button + ".png").resize(
                        (50, 50), Image.ANTIALIAS))
                labels.append(Label(self.f, image=render, bg='#2f324a'))
                labels[-1].img = render
                labels[-1].pack(side=LEFT)
            self.f.pack(side=TOP)

    def render_buttons(self):
        for row, keyboard in enumerate(keyboard_letters):
            self.f = Frame(self.win)
            for col, button in enumerate(keyboard):
                #command = lambda x=button: conversion(x)
                load = Image.open(pathKeyboard + button + ".png")
                render = ImageTk.PhotoImage(
                    load.resize((30, 30), Image.ANTIALIAS))
                img = Button(self.f,
                             image=render,
                             bg='#2f324a',
                             activebackground="#494d70",
                             borderwidth=0)
                img.image = render
                img.bind("<ButtonPress>",
                         lambda event, row=row, col=col: self.turnOnLamp(
                             event, row, col))
                img.bind("<ButtonRelease>",
                         lambda event, row=row, col=col: self.turnOffLamp(
                             event, row, col))

                img.pack(side=LEFT)
            self.f.pack(side=TOP)

    def turnOnLamp(self, event, row, col):
        global letter
        letter = self.machine.cifrar(keyboard_letters[row][col].upper())
        loadQ = Image.open(pathLamps + letter.lower() + "_h.png")
        renderHQ = ImageTk.PhotoImage(loadQ.resize((50, 50), Image.ANTIALIAS))
        indexLetter = dictNumLet.get(letter.lower())
        labels[indexLetter].configure(image=renderHQ)
        labels[indexLetter].image = renderHQ

    def turnOffLamp(self, event, row, col):
        loadQ = Image.open(pathLamps + letter.lower() + ".png")
        renderHQ = ImageTk.PhotoImage(loadQ.resize((50, 50), Image.ANTIALIAS))
        indexLetter = dictNumLet.get(letter.lower())
        labels[indexLetter].configure(image=renderHQ)
        labels[indexLetter].image = renderHQ