单击按钮(tkinter)时,不返回任何内容

时间:2015-06-29 20:42:33

标签: python-3.x encryption tkinter

当我运行时,没有出现错误,但按钮不返回任何内容

import tkinter
#imports the tkinter module

window = tkinter.Tk()
#creates window
window.geometry("675x300")
#sets window size
window.configure(background="#66FFFF")
#sets window background
window.title("Vigenere Cipher")
#Window title
window.wm_iconbitmap('favicon.ico')
#window logo
photo = tkinter.PhotoImage(file="vigciph12.gif")
#imports photo
w = tkinter.Label(window, image=photo)
#puts photo in window
w.pack()

lblInst = tkinter.Label(window, text="Encrypt Message Below.", bg="#66FFFF", font=("Helvetica", 16))
#Adds title
lblInst.pack()

lblphrase = tkinter.Label(window, text="Enter phrase to be encrypted:", bg="#66FFFF", font=("Helvetica", 10))
#tells user to enter phrase

phrases = str()
phrase = tkinter.Entry(window, textvariable = phrases )
#######添加框供用户提交回复##############(我怀疑这可能是问题的根源)
lblphrase.pack()
phrase.pack()

lblkeyphrase = tkinter.Label(window, text="Enter keyword:", bg="#66FFFF", font=("Helvetica", 10))

keyphrases = str()
keyphrase = tkinter.Entry(textvariable = keyphrases)
##为用户添加框提交回复#########(我怀疑这可能是问题的根源)
lblkeyphrase.pack()
keyphrase.pack()


def keyword_cipher(key, phrase):

            if len(phrase) > len(key):
                while len(phrase) > len(key):
                    length_to_add = len(phrase) - len(key)
                    key = key + key[0:length_to_add]
                    #adds words together so phrase is long enough

            elif len(phrase) < len(key):
                while len(phrase) < len(key):
                    length_to_sub = len(key) - (len(key) - len(phrase))
                    key = key[0:length_to_sub]


            else:
                pass

            #shift the characters
            shifted_phrase = ''
            for i in range(len(phrase)):
                new_letter = (ord(key[i]) - 96) + (ord(phrase[i]) - 96) + 96
                if new_letter > 122:
                    new_letter = chr(new_letter - 26)

                else:
                    new_letter = chr(new_letter)


                shifted_phrase = shifted_phrase + new_letter
            return shifted_phrase

            #shifts letters


            lbl.configure(text = (shifted_phrase))

            lbl = tkinter.Label(window, text="Nothing Yet", bg="#66FFFF", font=("Helvetica", 10))
            lbl.pack()
##############这可能是问题所在
def lol():
    keyword_cipher(keyphrases, phrases)




btn = tkinter.Button(window, text="Submit", fg="#66FFFF", bg="#383a39",command=lol())
btn.pack()



window.mainloop()

1 个答案:

答案 0 :(得分:1)

tkinter.Button(window, text="Submit", fg="#66FFFF", bg="#383a39",command=lol())
#                                                                           ↑↑

这使得lol函数立即执行。因此,作为关键字参数传递给tkinter.Button调用的是lol()的返回值。因此,当您单击按钮时,lol不是lol(),而是将lol()的返回值用作命令。

def lol(): keyword_cipher(keyphrases, phrases) 不会返回任何内容:

tkinter.Button(…, command=lol)

因此根本没有命令绑定到按钮。相反,传递函数本身:

keyword_cipher()

因为没有括号,所以不会立即调用。因此该函数用作命令回调。

请注意,您应该使用geneA 6 0 0 geneB 5 0 0 geneC 4 0 0 geneD 3 0 0 geneE 0 6 1 的返回值执行某些操作。例如,在UI中的某处显示它。