hi am new to python and i have created a very simple encryption code and a simple gui with tkinter but i cant seem to ‘connect’ them together i tried so hard but i need help right now
def machine():
global newMessage
keys = "abcdefghijklmnopqrstuvwxyz !"
values = keys[-1] + keys[0:-1]
encryptDict = dict(zip(keys, values))
decryptdict = dict(zip(values, keys))
message = input("Enter your message so i can encrypt or decrypt it :) ")
mode = input("encrypt(E) OR decrypt(D) ")
if mode.upper() == "E":
newMessage = ''.join([encryptDict[letter] for letter in message.lower()])
elif mode.upper() == "D":
newMessage = ''.join([decryptdict[letter] for letter in message.lower()])
else:
print("use either E or D ")
return newMessage
print(machine())
that is the encryption method
import tkinter as tk
HIGHT = 240
WIDTH = 720
root = tk.Tk()
canvas = tk.Canvas(root, height=HIGHT, width=WIDTH)
canvas.pack()
label = tk.Label(root, text="Enter your message so i can encrypt or decrypt it :)")
label.place(relx=0.25, rely=0.1, relwidth=0.5, relheight=0.125)
entry = tk.Entry(root)
entry.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.125)
entry = tk.Entry(root)
entry.place(relx=0.1, rely=0.7, relwidth=0.8, relheight=0.125)
button = tk.Button(root, text="Incrypt")
button.place(relx=0.68, rely=0.5, relwidth=0.125, relheight=0.125)
button = tk.Button(root, text="Decrypt")
button.place(relx=0.18, rely=0.5, relwidth=0.125, relheight=0.125)
root.mainloop()
and that is the gui
Advertisement
Answer
use the ‘command’ parameter in the Button
widget to set it to an event handler which in your case is machine
. Since you are encrypting and decrypting under the same function send a signal when calling this function as shown below using lambda
function. Also, replace message = input("Enter your message so i can encrypt or decrypt it :) ")
with message=entry.get()
. You have assigned entry=Entry()
twice I assume that’s a mistake so remove it. Finally instead of return
use the existing label widget to display output
using config
or you can also create a new label and use that for displaying the output.
Here is the complete code, which you may further improvise:
import tkinter as tk
HIGHT = 240
WIDTH = 720
def machine(mode):
global newMessage
keys = "abcdefghijklmnopqrstuvwxyz !"
values = keys[-1] + keys[0:-1]
encryptDict = dict(zip(keys, values))
decryptdict = dict(zip(values, keys))
message = entry.get()
if mode == 0:
newMessage = ''.join([encryptDict[letter] for letter in message.lower()])
elif mode == 1:
newMessage = ''.join([decryptdict[letter] for letter in message.lower()])
label.config(text='Message: '+ newMessage)
root = tk.Tk()
canvas = tk.Canvas(root, height=HIGHT, width=WIDTH)
canvas.pack()
label = tk.Label(root, text="Enter your message so i can encrypt or decrypt it :)")
label.place(relx=0.25, rely=0.1, relwidth=0.5, relheight=0.125)
entry = tk.Entry(root)
entry.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.125)
button = tk.Button(root, text="Encrypt", command=lambda :machine(0))
button.place(relx=0.68, rely=0.5, relwidth=0.125, relheight=0.125)
button2 = tk.Button(root, text="Decrypt", command=lambda :machine(1))
button2.place(relx=0.18, rely=0.5, relwidth=0.125, relheight=0.125)
root.mainloop()
Update:
To insert the text into the Entry
widget use Entry.insert(index, string)
. Also, don’t forget to clear the existing text in the Entry
by using Entry.delete(0, END)
, the ‘END’ specifier will make sure that it deletes all the text starting from 0th index.
import tkinter as tk
HIGHT = 240
WIDTH = 720
def machine(mode):
global newMessage
keys = "abcdefghijklmnopqrstuvwxyz !"
values = keys[-1] + keys[0:-1]
encryptDict = dict(zip(keys, values))
decryptdict = dict(zip(values, keys))
message = entry.get()
if mode == 0:
newMessage = ''.join([encryptDict[letter] for letter in message.lower()])
elif mode == 1:
newMessage = ''.join([decryptdict[letter] for letter in message.lower()])
entry2.delete(0, tk.END)
entry2.insert(0,'Message: '+ newMessage)
root = tk.Tk()
canvas = tk.Canvas(root, height=HIGHT, width=WIDTH)
canvas.pack()
label = tk.Label(root, text="Enter your message so i can encrypt or decrypt it :)")
label.place(relx=0.25, rely=0.1, relwidth=0.5, relheight=0.125)
entry = tk.Entry(root)
entry.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.125)
entry2 = tk.Entry(root)
entry2.place(relx=0.1, rely=0.7, relwidth=0.8, relheight=0.125)
button = tk.Button(root, text="Encrypt", command=lambda :machine(0))
button.place(relx=0.68, rely=0.5, relwidth=0.125, relheight=0.125)
button2 = tk.Button(root, text="Decrypt", command=lambda :machine(1))
button2.place(relx=0.18, rely=0.5, relwidth=0.125, relheight=0.125)
root.mainloop()