我有一个大学作业,编写一个使用ROT13加密给定单词的Python程序。我成功地做到了这一点,因此作为个人挑战,我想创建一个使用此加密程序的 Tkinter GUI 程序。
当我在默认的Python IDE(IDLE)中运行它时,我下面的代码完全按预期工作,但是当我通过双击.py文件运行它时,它只是在一瞬间打开一个控制台窗口,然后什么都没有。我在这里做错了什么?我需要以不同的方式打包 Tkinter 窗口还是其他方式?
from tkinter import *
def encrypt():
OldString = v.get()
NewString = ''
for letter in OldString:
OldCode = ord(letter)
if OldCode < (ord('N')):
NewCode = (OldCode + 13)
else:
NewCode = (OldCode - 13)
NewChar = chr(NewCode)
NewString = (NewString + NewChar)
v.set(NewString)
def decrypt():
OldString = v.get()
NewString = ''
for letter in OldString:
OldCode = ord(letter)
if OldCode > (ord('N')):
NewCode = (OldCode + 13)
else:
NewCode = (OldCode - 13)
NewChar = chr(NewCode)
NewString = (NewString + NewChar)
v.set(NewString)
win = Tk()
win.wm_title("ROT13 Encrypter")
win.minsize(150,100)
f = Frame(win)
l = Label(win, text="ROT13 Encrypter", font=('', 12, 'bold'))
v = StringVar()
e = Entry(f, textvariable=v)
b1 = Button(f, text="Encrypt", font=('', 9, 'bold'), command=encrypt)
b2 = Button(f, text="Decrypt", font=('', 9, 'bold'), command=decrypt)
e.pack(pady=5)
b1.pack(side=LEFT, padx=8, pady=5)
b2.pack(side=RIGHT, padx=8, pady=5)
l.pack()
f.pack()
仅供参考,我打算使用cx_Freeze打包此程序,以便我可以轻松地从USB记忆棒运行.exe。
提前谢谢。
在 IDLE 之外,需要在脚本末尾调用根窗口的 mainloop
方法:
...
b1.pack(side=LEFT, padx=8, pady=5)
b2.pack(side=RIGHT, padx=8, pady=5)
l.pack()
f.pack()
###############
win.mainloop()
###############
这样做将启动应用程序的主事件循环。
首先导入 Tkinter,如下所示:
from Tkinter import *
然后剩下的代码就可以正常工作了。
最后调用根窗口
win.mainloop()