我使用來自 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()
uj5u.com熱心網友回復:
您根本不需要單獨安裝tkinter或base64,它們都是內置的。(如果您的 Python 安裝中沒有內置 Tkinter 支持,您將需要使用 Tkinter 支持重建 Python,您不能單獨安裝它。)
- 如果您確實這樣做了
pip install tk,那么您將安裝這個與tkinter. 你會想要卸載它。 - 同樣,您不需要
pybase64執行 base64 操作。最好也卸載。 - 第三,確保你的腳本沒有被
tk.py自己呼叫。 - 最后,如上所述,模塊是
tkinter,而不是tk。為了簡潔起見,這很常見import tkinter as tk。- 此外,使用
*匯入通常不是一個好主意。你會發現你的命名空間被各種你不需要或不知道它們來自哪里的符號污染了。
- 此外,使用
uj5u.com熱心網友回復:
嘗試匯入 tkinter,from tkinter import messagebox
你也可以對其余的匯入做同樣的事情
from tkinter import * as tk
import pybase64
from tkinter import messagebox
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411582.html
標籤:
