【发布时间】:2022-01-14 16:56:00
【问题描述】:
我使用来自 Anaconda 的 Spyder ide,我只是在玩 python 并尝试对消息进行编码/解码。安装库 tkinter 和 base64 时出现很多错误。最终它运行但必须改为 pip install tk/pybase64 。 在遇到一些麻烦之后,出现了我完全不知道如何修复的新错误。互联网上的资源对我帮助不大。
错误:无法从 'tk' 导入名称 'messagebox'
import tk as tk
from tk import *
import pybase64
from tk import messagebox
tk.messagebox
root = Tk()
root.geometry("600x600")
root.title("TechVidvan Message Encryption and Decryption")
Msg = tk.StringVar()
key = tk.StringVar()
mode = tk.StringVar()
Result = tk.StringVar()
label = tk.Label(root, text='Enter Message', font=('Helvetica',10))
label.place(x=10,y=0)
mes = tk.Entry(root,textvariable=Msg, font=('calibre',10,'normal'))
mes.place(x=200,y=0)
label1 = tk.Label(root, text='e for encrypt and d for decrypt', font=('Helvetica',10))
label1.place(x=10,y=50)
l_mode = tk.Entry(root, textvariable=mode, font=('calibre',10,'normal'))
l_mode.place(x=200,y=50)
label2 = tk.Label(root, text='Enter key', font=('Helvetica',10))
label2.place(x=10,y=100)
l_key = tk.Entry(root, textvariable=key, font=('calibre',10,'normal'))
l_key.place(x=200,y=100)
label3 = tk.Label(root, text='Result', font=('Helvetica',10))
label3.place(x=10,y=150)
res = tk.Entry(root,textvariable=Result, font=('calibre',10,'normal'))
res.place(x=200,y=150)
#-------------------------------------------------------
def encode(key, msg):
enc = []
for i in range(len(msg)):
key_c = key[i % len(key)]
enc_c = chr((ord(msg[i]) +
ord(key_c)) % 256)
enc.append(enc_c)
return pybase64.urlsafe_b64encode("".join(enc).encode()).decode()
def decode(key, enc):
dec = []
enc = pybase64.urlsafe_b64decode(enc).decode()
for i in range(len(enc)):
key_c = key[i % len(key)]
dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
dec.append(dec_c)
return "".join(dec)
def Results():
msg = Msg.get()
k = key.get()
m = mode.get()
m.lower()
if (m == 'e'):
Result.set(encode(k, msg))
elif(m== 'd'):
Result.set(decode(k, msg))
else:
messagebox.showinfo('TechVidvan', 'Wrong mode entered. Try again.')
def qExit():
root.destroy()
def Reset():
Msg.set("")
key.set("")
mode.set("")
Result.set("")
btnshow = tk.Button(root, text='Show Message', foreground='green', command=Results)
btnshow.place(x=10,y=200)
btnreset = tk.Button(root, text='Reset', foreground='red', command=Reset)
btnshow.place(x=150,y=200)
btnexit = tk.Button(root, text='Exit', foreground='black', command=qExit)
btnshow.place(x=300,y=200)
root.mainloop()
【问题讨论】:
-
你根本不需要单独安装 tkinter 或 base64,它们都是内置的...
-
不建议将
from x import *删除并重试。