2013-05-03 68 views
0

我一直在使用python和Tkinter一段时间,并决定制作基于文本的游戏。我知道如何在python中完成这些功能,但我想要一个实际的窗口,而不仅仅是控制台。我已经想出了如何制作窗口并显示一串文字......但我希望能够输入和显示文字。Tkinter:将变量设置为字符串输入

from Tkinter import * 

w=Tk() 

textvar="Welcome, to the PIT OF INSANLEY INTENSE THINGS... AND STUFF!!!" 

def key(event): 
    print event.char 

t=Text(w) 
t.insert(INSERT,textvar) 
t.configure(state=DISABLED) 
t.bind("<Key>",key) 
t.pack() 

w.mainloop() 

此代码制作一个简单的窗口并显示字符串变量的值。另外,我得到它来打印您在控制台中按下的键,但是我希望能够将这些字符添加到字符串中,以便您可以看到您键入的内容。这是基于文本的游戏的基本组成部分:)

我很感激任何人的帮助。谢谢

+0

什么你_probably_想要的是一个'Entry'(或票友文本框状的控制),而不是试图手工处理击键。是否有一个不合适的理由,或者你想要一个答案显示如何做到这一点? – abarnert 2013-05-03 00:30:50

+0

我之前听说过参赛作品,但我从未研究过它们。我真的不想要一个弹出式文本框,而只是显示在窗口中的文本。如果没有太多的工作,看到一个例子会很高兴,但这不是什么大问题。 – 2013-05-03 00:34:58

+0

这不是一个弹出窗口,只是窗口内的可编辑框。我会写一个例子来向你展示。 – abarnert 2013-05-03 00:35:28

回答

0

下面的代码显示了如何使用Entry从用户获取文本输入,而不是尝试手动处理关键事件。

它还显示了两种不同的方式让用户触发你 - 当输入具有焦点时按下输入/返回键会调用你的enter功能,而点击该按钮则会调用你的click功能。还有其他一些可触发的东西 - 每一个内容的改变,每次按键,输入失去焦点,......但这两个应该足以展现出这个想法。

最后,它显示如何使用Entry的内容来修改您的Text,而不是将某些内容打印到控制台。这里的诀窍是只读文本甚至只读为insert/etc。方法,所以你必须暂时切换到NORMAL。 (该Text文档有关的一路下跌的页面第三解释这个问题。)

from Tkinter import * 

w=Tk() 

textvar="Welcome, to the PIT OF INSANLEY INTENSE THINGS... AND STUFF!!!" 

t=Text(w) 
t.insert(INSERT,textvar) 
t.configure(state=DISABLED) 
t.pack() 

def do_command(command): 
    t.configure(state=NORMAL) 
    t.insert(INSERT, '\nYou said, "{}"'.format(command)) 
    t.configure(state=DISABLED) 

e=Entry() 
e.pack(side=BOTTOM) 

def enter(event): 
    do_command(e.get()) 

e.bind('<KeyRelease-Return>', enter) 

def click(): 
    do_command(e.get()) 

b=Button(text='DOIT!', command=click) 
b.pack(side=BOTTOM) 

w.mainloop() 
+0

非常感谢!您认为我可以将“打印”改为“返回”,以便我可以在窗口中显示文本? – 2013-05-03 00:39:43

+0

好吧,只是'return'不会做任何事情。但是,您可以更改它以将条目内容添加到文本内容的末尾或其他任何您想要的内容。让我编辑它以显示如何。 – abarnert 2013-05-03 00:40:44

+0

非常感谢您的帮助。现在我有机会在周六为我的朋友进行一个可玩的演示! – 2013-05-03 00:54:12