简体   繁体   English

如何在tkinter窗口上添加函数结果字符串?

[英]How do I add a function result string on the tkinter window?

I am new in python and trying to make a program for converting a given string into a secret code. 我是python的新手,正在尝试制作一个程序,将给定的字符串转换为秘密代码。 The string entered by user in the text box is taken as input and converted in secret code (using the encryption module). 用户在文本框中输入的字符串将作为输入并以密码转换(使用加密模块)。 How do I display the result in the window (I tried using the label but it shows an error.) 如何在窗口中显示结果(我尝试使用标签,但显示错误。)

from tkinter import *
import encryption as En             # Loading Custom libraries
import decryption as De
out_text = None     # Out text is the output text of message or the encryption
root = None
font_L1 = ('Verdana', 18, 'bold')   # The font of the header label
button1_font = ("Ms sans serif", 8, 'bold')
button2_font = ("Ms sans serif", 8, 'bold')
font_inst = ("Aerial", 8)
my_text = None
input_text = None
text_box = None
resut_l = None
result_2 = None

def b1_action():                       # Encryption button
    input_text = text_box.get()
    if input_text == "":
        print("Text field empty")
    else:
        En.enc_text(input_text)         # Message is returned as 'code'

def b2_action():
    input_text = text_box.get()
    if input_text == "":
        print("Text field Empty")
    else:
        De.dec_text(input_text)        

def enc_button():           # Button for rendering encryption
    b1 = Button(root, text = "ENCRYPT", font = button1_font, command = b1_action)
    b1.configure(bg = 'palegreen3', width = '10', height = '3')
    b1.place(x = '120', y = '130')

def dec_button():           # Button for decryption
    b2 = Button(root, text = "DECRYPT", font = button2_font, command = b2_action)
    b2.configure(bg = 'palegreen3', width = '10', height = '3')
    b2.place(x = '340', y = '130')

def main():                         #This is the core of GUI
    global root
    global text_box
    root = Tk()
    root.geometry("550x350")
    root.configure(bg = "MediumPurple1")
    win_text = Label(root, text = 'Enter text below and Choose an action:', bg = 'MediumPurple1', font = font_L1)
    win_text.place(x = '10', y = '50')
    text_box = Entry(root, text = 'Enter the Text', width = 60, bg = 'light blue')
    text_box.place(x = '100', y = '100')
    inst_text = Label(root, text = instructions, bg = "MediumPurple1", font = font_inst)
    inst_text.pack(side = BOTTOM)
    enc_button()
    dec_button()
    root.title('Secret Message.')
    root.mainloop() 


main()

And here is the encryption module 这是加密模块

def enc_text(line):
    msg = str(line).replace(' ', '_').lower()
    msg_list = list(msg)
    all_char = list("abcdefghijklmnopqrstuvwxyzabc_!?@")

    for i in range(0, len(msg)):
        pos_replaced = all_char.index(str(msg_list[i])) #will give the positon of the word to be replaced in the main list of alphabets
        msg_list.insert(i, all_char[pos_replaced + 3])  #will replace the elements one by one
        msg_list.pop(i + 1)
        i += 1

    code = ''.join(msg_list).replace('@', ' ')
    print(code)

You can also suggest some improvisations. 您也可以建议一些即兴创作。

Part of the problem is that Entry widgets don't have a text= configuration option, so it's completely ignored in the line: 问题的一部分是Entry窗口小部件没有text=配置选项,因此在该行中将其完全忽略:

text_box = Entry(root, text='Enter the Text', width=60, bg='light blue')

The best way to handle the character contents of an Entry is by using its textvariable= option and setting the value of it to be an instance of a tkinter.StringVar , then the getting and setting the value of that object will automatically update the Entry widget on the screen. 来处理的字符内容的最佳方式Entry是通过使用其textvariable=选项,设置它的值是一个实例tkinter.StringVar ,那么获取和设置对象的值会自动更新Entry控件屏幕上。

Below is your code with changes made to it to do this. 下面是您的代码,其中对此进行了更改。 Note I commented and changed a few unrelated things to be able to run the code, but tried to indicate the most important ones. 请注意,我评论并更改了一些不相关的内容以能够运行代码,但尝试指出最重要的内容。 Also note I added a return code statement at the very end of the enc_text() function in your custom encryption module. 还要注意,我在自定义encryption模块的enc_text()函数的末尾添加了一个return code语句。

from tkinter import *
import encryption as En             # Loading Custom libraries
#import decryption as De            # DON'T HAVE THIS.

out_text = None     # Out text is the output text of message or the encryption
root = None
font_L1 = ('Verdana', 18, 'bold')   # The font of the header label
button1_font = ("Ms sans serif", 8, 'bold')
button2_font = ("Ms sans serif", 8, 'bold')
font_inst = ("Aerial", 8)
my_text = None
input_text = None
text_var = None                     # ADDED.
text_box = None
resut_l = None
result_2 = None

# CHANGED TO USE NEW "text_var" variable.
def b1_action():                       # Encryption button
    input_text = text_var.get()
    if input_text == "":
        print("Text field empty")
    else:
        text_var.set(En.enc_text(input_text))

def b2_action():
    input_text = text_box.get()
    if input_text == "":
        print("Text field Empty")
    else:
        """De.dec_text(input_text)"""

def enc_button():           # Button for rendering encryption
    b1 = Button(root, text="ENCRYPT", font=button1_font, command=b1_action)
    b1.configure(bg='palegreen3', width='10', height='3')
    b1.place(x='120', y='130')

def dec_button():           # Button for decryption
    b2 = Button(root, text="DECRYPT", font=button2_font, command=b2_action)
    b2.configure(bg='palegreen3', width='10', height='3')
    b2.place(x='340', y='130')

def main():                         #This is the core of GUI
    global root
    global text_box
    global text_var                 # ADDED
    root = Tk()
    root.geometry("550x350")
    root.configure(bg="MediumPurple1")
    win_text = Label(root, text='Enter text below and Choose an action:',
                     bg='MediumPurple1', font=font_L1)
    win_text.place(x='10', y='50')
    text_var = StringVar()          # ADDED
    text_var.set('Enter the Text')  # ADDED
    # CHANGED text='Enter the Text' to textvariable=text_var
    text_box = Entry(root, textvariable=text_var, width=60, bg='light blue')
    text_box.place(x='100', y='100')
    inst_text = Label(root, text="instructions", bg="MediumPurple1",
                      font=font_inst)
    inst_text.pack(side=BOTTOM)
    enc_button()
    dec_button()
    root.title('Secret Message.')
    root.mainloop()

main()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM