2012-02-18 187 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窗口。您可以使用套接字相互通信,也可以通过参数或环境变量或临时文件将数据从父节点传递给子节点。