如何等待使用条目小部件单击返回?

时间:2012-04-22 15:55:38

标签: python user-interface tkinter widget tkinter-entry

我只是想在Tkinter制作一个非图形游戏,但我在使用条目小部件时遇到了麻烦。如何在打印之前等待"<Return>"被按下?

    from Tkinter import *

    class App:
        def __init__(self, master):

            frame = Frame(master)
            frame.pack()
            f = Frame(master, width=500, height=300)
            f.pack(fill=X, expand=True)

            mt = StringVar()


            menubar = Menu(master)
            menubar.add_command(label="New Game", command=self.new_game)
            menubar.add_command(label="Continue Game", command=self.continue_game)
            master.config(menu=menubar)

            maintext = Label(master, fg="blue", textvariable=mt)
            maintext.pack(side=BOTTOM)
            mt.set("")

            self.e1 = Entry(master)
            self.e1.pack()
            self.e1.bind("<Return>")
            self.e1.lower()


            global mt


        def new_game(self):
            mt.set("What do you want your username to be?")
            self.e1.lift()
            #wait for <Return> to be pressed
                mt.set("Welcome " + self.e1.get())
        def continue_game(self):
            mt.set("Type your username in.")



    root = Tk()

    app = App(root)

    root.mainloop()

我希望它是当我点击顶部菜单栏上的“新游戏”时,它会显示输入框并等待我输入内容,然后单击回车。然后打印出“欢迎”+(该人输入的内容)。实际发生的是当我点击新游戏时,它会立即打印出“欢迎”。

通过打印,我的意思是将底部的标签设置为其他内容,这是“mt.set”所引用的。

1 个答案:

答案 0 :(得分:0)

在GUI程序中,您不会等待*发生某些事情,您会对事件做出响应。因此,要在用户按下返回时调用函数,您可以执行以下操作:

    self.e1.bind("<Return>", self._on_return)

当用户按下返回键时,上面将调用函数_on_return

在您的特定代码中,您并不需要StringVar。例如,您可以这样做:

def __init__(self, master):
    ...
    self.maintext = Label(master, fg="blue")
    ...

def _on_return(self, event):
    self.maintext.configure(text="Welcome, %s" % self.e1.get())

*严格来说,你可以等待事情,但这不是编写GUI程序的正确方法,除非在特定情况下,例如等待对话被解雇。