下面是一个代码段,为用户提供了4个选项。要么:加密邮件,解密邮件,更改<M-CR>
或显示encryption_code
。
encryption_code
我的问题是在我的代码中声明import tkinter
from tkinter import *
from tkinter import ttk
from tkinter.ttk import *
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
encryption_code = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
letters += letters.lower()
encryption_code += encryption_code.lower()
enc = dict(zip(letters,encryption_code))
dec = dict(zip(encryption_code, letters))
window = tkinter.Tk()
style = ttk.Style(window)
style.configure("BW.TLabel")
encrypt_frame = tkinter.Frame(window)
encrypted_frame = tkinter.Frame(window)
change_frame = tkinter.Frame(window)
changed_frame = tkinter.Frame(window)
entry = tkinter.Entry(encrypt_frame)
encrypt_entry = tkinter.Entry(change_frame)
encryptget = encrypt_entry.get()
def code_change():
global changed_frame
global encrypt_entry
global encryption_code
global encryptget
if len(encryptget) == 26:
encryption_code = encryptget
encryption_code += encryption_code.lower()
changed_label.configure(background=window.cget('bg'))
changed_label.config(text="You have successfully changed the encryption code!")
change_header.config(text="Your code is: " + str(encryptget.upper()))
changed_frame.pack_forget()
changed_label.pack()
changed_frame.pack()
def encrypt():
global encrypt_frame
entry.focus_set()
entry.pack()
encrypt_confirm.pack()
back_button.pack()
encrypt_frame.pack()
first_frame.pack_forget()
def display_encrypt():
global encryption_code
if len(entry.get()) > 0:
display_enc = "".join([enc.get(ch, ch) for ch in entry.get()])
entry.delete(0, tkinter.END)
new_message.config(background=window.cget('bg'))
new_message.config(text=str(display_enc))
new_message.pack()
encrypted_frame.pack()
def back():
new_message.pack_forget()
entry.delete(0, tkinter.END)
first_frame.pack()
encrypt_frame.pack_forget()
encrypted_frame.pack_forget()
change_frame.pack_forget()
changed_frame.pack_forget()
def change_code():
global change_frame
encrypt_entry.focus_set()
encrypt_entry.pack()
change_confirm.pack()
back_button4.pack()
change_frame.pack()
first_frame.pack_forget()
first_frame = tkinter.Frame(window)
encrypt_button = ttk.Button(first_frame, text="Encrypt", width=20, command=encrypt)
change_code = ttk.Button(first_frame, text="Change code", width=20, command=change_code)
encrypt_button.pack()
change_code.pack()
first_frame.pack()
back_button = ttk.Button(encrypt_frame, text="Back", width=20, command=back)
back_button4 = ttk.Button(change_frame, text="Back", width=20, command=back)
encrypt_confirm = ttk.Button(encrypt_frame, text="Confirm", width=20, command=display_encrypt)
new_message = tkinter.Label(encrypted_frame, text="", font=('Helvetica', 10))
change_confirm = ttk.Button(change_frame, text="Confirm", width=20, command=code_change)
window.mainloop()
全局不起作用。它不起作用的函数是encryption_code
和def display_encrypt
(def display decrypt
保持为LFWOAYUISVKMNXPBDCRJTQEGHZ,即使用户已更改它),而在其他函数中,它完美地运行。
例如,您将加密代码更改为QWERTYUIOPASDFGHJKLZXCVBNM,然后转到加密并键入ABC。它应该加密到QWE,而是加密到LFW(原始加密代码)
答案 0 :(得分:1)
您的代码中至少有两个错误,可能更多。
首先,就像上一个问题一样,code_change
中的第一个if语句不正确。至少有两个答案可以解决这个问题。我建议你回去重新阅读你在这里接受的答案:https://stackoverflow.com/a/33411642/7432。
第二个问题是您没有使用encrypton_code
进行加密,而是使用enc
(类似地,dec
进行了描述)。 当用户输入另一个加密字符串时,您永远不会更改这些变量。因为您永远不会更改它们,所以您加密的每个字符串都使用原始加密字符串。
解决方案是更新enc
中的dec
和code_change
:
def code_change():
global enc, dec
...
if len(encryptget) == 26:
...
enc = dict(zip(letters,encryption_code))
dec = dict(zip(encryption_code, letters))
...