【问题标题】:entry.get() function won't change value of a variableentry.get() 函数不会改变变量的值
【发布时间】:2015-10-23 15:56:20
【问题描述】:

我有一些代码要求用户输入他们想要加密的单词,然后程序将加密该单词并将其显示在标签上。 我想知道为什么以下代码有效:

import tkinter

letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

encryption_code = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
letters += letters.lower()
encryption_code += encryption_code.lower()

window = tkinter.Tk()
encryption_code_entry = tkinter.Entry(window)
entry = tkinter.Entry(window)

enc = dict(zip(letters,encryption_code))

string = 'hello world'

encr = "".join([enc.get(ch, ch) for ch in string])

def encrypt():    
    encrypt_label.pack()
    entry.pack()
    encrypt_confirm.pack()
    encrypt_button.destroy()

def display_encrypt():
    display_enc = encr
    encrypted_label.pack()
    new_message.config(text=str(display_enc))
    new_message.pack()

encrypt_confirm = tkinter.Button(window, text="Confirm", command=display_encrypt)
new_message = tkinter.Label(window, text="", font=('Helvetica', 10))
encrypted_label = tkinter.Label(window, text="Your message " + entry.get() + " has been encrypted into the following: ")
encrypt_button = tkinter.Button(window, text="Encrypt", command=encrypt)
encrypt_button.pack()
encrypt_label = tkinter.Label(window, text="Please enter the message you'd like to encrypt", font=('Helvetica', 14))

window.mainloop()

但是如果我将string = 'hello world'(这是我想做的)更改为string = entry.get(),则不会显示任何内容onnew_message`。还有,

encrypted_label = tkinter.Label(window, text="Your message " + entry.get() + "has been encrypted into the following: ")

不显示用户在输入框中输入的内容,因此我几乎 100% 确定我误用了 entry.get() 函数。

【问题讨论】:

    标签: python function tkinter label


    【解决方案1】:

    您实际上需要在display_encrypt() 下拥有entry.get()

    每次按下encrypt_confirm 按钮时,它都会调用display_encrypt,而display_encrypt 反过来又能够在用户每次按下它时获取entry 中的当前字符串。

    我稍微编辑了您的代码,它似乎可以正常工作。

    请注意,我已删除 stringencr,因为它们现在是冗余变量。

    import tkinter
    
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    encryption_code = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
    letters += letters.lower()
    encryption_code += encryption_code.lower()
    
    window = tkinter.Tk()
    encryption_code_entry = tkinter.Entry(window)
    entry = tkinter.Entry(window)
    
    enc = dict(zip(letters,encryption_code))
    
    string = 'hello world'
    
    def encrypt():    
        encrypt_label.pack()
        entry.pack()
        encrypt_confirm.pack()
        encrypt_button.destroy()
    
    def display_encrypt():
        display_enc = "".join([enc.get(ch, ch) for ch in entry.get()])
        encrypted_label.pack()
        new_message.config(text=str(display_enc))
        new_message.pack()
    
    encrypt_confirm = tkinter.Button(window, text="Confirm", command=display_encrypt)
    new_message = tkinter.Label(window, text="", font=('Helvetica', 10))
    encrypted_label = tkinter.Label(window, text="Your message " + entry.get() + " has been encrypted into the following: ")
    encrypt_button = tkinter.Button(window, text="Encrypt", command=encrypt)
    encrypt_button.pack()
    encrypt_label = tkinter.Label(window, text="Please enter the message you'd like to encrypt", font=('Helvetica', 14))
    
    window.mainloop()
    

    【讨论】:

      【解决方案2】:

      您在用户有机会输入任何内容之前就调用了entry.get()。您需要调用它并重置标签以响应事件,例如用户按下、单击按钮等。

      【讨论】:

      • 如果我把entry.get()放在def display_encrypt()下面会行吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2023-03-21
      • 2020-09-19
      相关资源
      最近更新 更多