Tkinter窗口不出现在空闲(Python)之外

2024-09-28 22:19:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我的大学作业是写一个Python程序,用ROT13加密给定的单词。我成功地做到了这一点,因此作为个人挑战,我想创建一个使用这个加密程序的Tkinter GUI程序。在

当我在默认的PythonIDE(IDLE)中运行它时,下面的代码完全可以正常工作,但是当我通过双击.py文件来运行它时,它只会在一瞬间打开一个控制台窗口,然后什么也没有。我做错什么了?我需要用不同的方式把窗户打包吗,还是别的什么?在

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打包这个程序,这样我就可以从我的U盘上轻松地运行.exe。在

提前谢谢。在


Tags: text程序winpackfontboldletterrot13
2条回答

首先导入Tkinter,例如:

from Tkinter import *

剩下的代码就可以正常工作了。在

最后调用根窗口

win.mainloop()

在IDLE之外,您需要在脚本末尾调用根窗口的mainloop方法:

...
b1.pack(side=LEFT, padx=8, pady=5)
b2.pack(side=RIGHT, padx=8, pady=5)

l.pack()
f.pack()

###############
win.mainloop()
###############

这样做将启动应用程序的主事件循环。在

相关问题 更多 >