2012-04-27 52 views
0

如何允许从IDLE命令行上的文本输入更新图形?如果我有这样的:在文本游戏旁边运行Tkinter?

from Tkinter import * 

root = Tk() 
can = Canvas(root, height=500, width=100) 
can.pack() 
mainloop() 

x = input("what is a number? ") 
print x 

的窗口会出现,但提示在命令行上不会。任何想法,我怎么可以允许这个?

+1

您需要彻底重新思考一旦您引入事件循环后如何进行输入。 – 2012-04-27 20:01:00

+0

尝试在上面的主循环下放置代码行:) – 2012-04-27 20:01:09

+0

问题是,为什么要在输入来自命令行时才能有效生成GUI?通常情况下,您可能需要创建一个Toplevel窗口,该窗口提示用户输入一个数字,让他们在Entry字段中输入,然后将该值返回到您的程序中。当然,您始终可以定义一个回调,该回调会提示一个数字,但你会冻结你的图形用户界面,直到用户输入一个数字... – mgilson 2012-04-27 20:44:54

回答

0

如果它只是用于调试或一次性配置/输入,你可以把它作为一个命令行参数的程序,或者主循环()调用之前的任何地方把提示代码。另一方面,如果它正在持续输入游戏,则应该在主窗体中添加一个文本输入字段并可能包含一个按钮,以便用户可以输入数据并按下该按钮以指示何时完成输入并具有事件处理程序绑定到按钮处理输入字段的内容。

如果没有上面取得了很大的意义,看看其中有很多有关Tk的有用的信息,包括如何使所有的Python的调用(在其他语言中)的代码示例网站TkDocs

0

我会建议只使用tkinter的小部件。

import Tkinter as tk 

def numEntered(*args): 
    print x.get() 
    x.set('') 
    return 

root = tk.Tk() 
can = tk.Canvas(root, height=500, width=100) 
can.pack() 

inputFrame=tk.LabelFrame(root, text="What is a number?") 
inputFrame.pack() 

x=tk.StringVar() 
inputEntry=tk.Entry(inputFrame,textvariable=x) 
inputEntry.pack() 

inputEntry.bind('<Return>',numEntered) 

tk.mainloop() 

注意几项: 1)我把一个标签框,当你正在使用的包几何经理,这有助于文本输入。 2)当用户输入一个数字并点击输入(返回)键时,我使用绑定方法执行该功能。 3)函数打印数字,然后清除变量。

我希望这有助于!