当我运行时,没有出现错误,但按钮不返回任何内容
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()
答案 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中的某处显示它。