1

我只是想在 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”引用。

4

1 回答 1

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 程序的正确方法,除非在特定情况下,例如等待对话框被关闭。

于 2012-04-22T17:43:42.627 回答