Tkinter窗口未出现在IDLE(Python)之外



我有一个大学作业,编写一个使用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()

最新更新