我只是想在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”所引用的。
答案 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程序的正确方法,除非在特定情况下,例如等待对话被解雇。