首页 > 解决方案 > 你如何“连接”这个源代码和我的 tkinter python

问题描述

嗨,我是 python 新手,我用 tkinter 创建了一个非常简单的加密代码和一个简单的 gui,但我似乎无法将它们“连接”在一起我非常努力,但我现在需要帮助

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())

那是加密方法

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()

那就是gui

标签: pythonuser-interfacetkinterencryption

解决方案


使用小部件中的“命令”参数将Button其设置为事件处理程序,在您的情况下为machine. 由于您在同一函数下进行加密和解密,因此在调用此函数时会发送一个信号,如下所示使用lambda函数。另外,替换 message = input("Enter your message so i can encrypt or decrypt it :) ")message=entry.get(). 你已经分配entry=Entry()了两次,我认为这是一个错误,所以删除它。最后,不要return使用现有的标签小部件来显示输出,config或者您也可以创建一个新标签并使用它来显示输出。

这是完整的代码,您可以进一步即兴创作:

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()

更新

要将文本插入Entry小部件,请使用Entry.insert(index, string). 另外,不要忘记使用 清除现有文本EntryEntry.delete(0, END)'END' 说明符将确保它删除从第 0 个索引开始的所有文本。

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()

推荐阅读