2012-02-18 210 views
0

我在我的IDE和Tkinter窗口中的python shell之間有問題。我想要做的是將所有的用戶輸入到shell中,然後我想在Tkinter窗口中輸出相應的信息。Python Tkinter窗口輸出和Shell輸入

但是,當我的窗口被創建並彈出時,我關閉它以在shell中繼續我的程序,然後繼續輸入。但是,當我嘗試重新初始化我的窗口。它說窗戶已經被毀壞了。我明白這意味着什麼,所以我嘗試了一個Toplevel窗口,在那裏輸出可以關閉的信息,並隱藏我的根窗口,但是在我關閉/銷燬根窗口之前,shell將不會繼續。

有沒有一種方法可以在不破壞我的根窗口的情況下在shell中繼續?我對這種語言相當陌生,所以任何幫助將非常感激。

這是我的總體思路:

from Tkinter import * 

#get all my info from the shell 

root = Tk() 
root.withdraw() #hide the root window 

main = Toplevel() 
    #this is the window that I want to be able to close and open later 

#get more info from the shell after main is closed 

#now I want to open the updated main window 

提前感謝! (而且我在Windows上工作,如果該事項)

回答

1

我不知道,如果你正在嘗試做的,這是最有效的方式,但我會到目前爲止提出這些變化的方式:

from Tkinter import * 

#get all my info from the shell 

window = Tk() 
window.iconify() #hide the root window 

#get more info from the shell after main is closed 

window.deiconify() 
window.mainloop() # to handle events 

我重命名了你的root-Window,使它更清楚你發生了什麼,並刪除了超級(imho)額外的Toplevel-window!

另外請記住,如果沒有主循環和必要的事件處理程序,您將無法完成任何操作!

1

簡而言之,這不是Tkinter設計的工作原理。 Tkinter被設計爲具有一次創建的單個根窗口,並且具有正在運行的單個事件循環。任何其他方式使用它必然會導致不希望的行爲。

如果您確實需要使用這種方式的代碼,請在一個進程中從您的shell收集輸入,然後使用單獨的進程來顯示tkinter窗口。您可以使用套接字相互通信,也可以通過參數或環境變量或臨時文件將數據從父節點傳遞給子節點。