2012-04-27 89 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)函數打印數字,然後清除變量。

我希望這有助於!