声明一个全局变量在整个代码片段中不起作用
Declaring a variable global not working throughout code snippet
下面的代码片段为用户提供了 4 个选项。要么:加密消息,解密消息,更改 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
global 在我的代码中不起作用。它不起作用的功能是 def display_encrypt
和 def display decrypt
(encryption_code
保持为 LFWOAYUISVKMNXPBDCRJTQEGHZ,即使用户更改了它)而在其他功能中,它工作得很好。
例如,您将加密代码更改为QWERTYUIOPASDFGHJKLZXCVBNM,然后转到加密并键入ABC。本应加密为QWE却加密为LFW(原加密码)
您的代码中至少有两个错误,也许更多。
首先,就像您之前的问题一样,code_change
中的第一个 if 语句不正确。至少有两个答案可以解决这个问题。我建议您返回并重新阅读您在此处接受的答案:.
第二个问题是您没有使用 encrypton_code
进行加密,而是使用 enc
(同样,dec
用于描述)。 当用户输入另一个加密字符串时,您永远不会更改这些变量。因为您从不更改它们,所以您加密的每个字符串都使用原始加密字符串。
解决方法是更新code_change
中的enc
和dec
:
def code_change():
global enc, dec
...
if len(encryptget) == 26:
...
enc = dict(zip(letters,encryption_code))
dec = dict(zip(encryption_code, letters))
...
下面的代码片段为用户提供了 4 个选项。要么:加密消息,解密消息,更改 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
global 在我的代码中不起作用。它不起作用的功能是 def display_encrypt
和 def display decrypt
(encryption_code
保持为 LFWOAYUISVKMNXPBDCRJTQEGHZ,即使用户更改了它)而在其他功能中,它工作得很好。
例如,您将加密代码更改为QWERTYUIOPASDFGHJKLZXCVBNM,然后转到加密并键入ABC。本应加密为QWE却加密为LFW(原加密码)
您的代码中至少有两个错误,也许更多。
首先,就像您之前的问题一样,code_change
中的第一个 if 语句不正确。至少有两个答案可以解决这个问题。我建议您返回并重新阅读您在此处接受的答案:
第二个问题是您没有使用 encrypton_code
进行加密,而是使用 enc
(同样,dec
用于描述)。 当用户输入另一个加密字符串时,您永远不会更改这些变量。因为您从不更改它们,所以您加密的每个字符串都使用原始加密字符串。
解决方法是更新code_change
中的enc
和dec
:
def code_change():
global enc, dec
...
if len(encryptget) == 26:
...
enc = dict(zip(letters,encryption_code))
dec = dict(zip(encryption_code, letters))
...