Python Tkinter窗口输出和Shell输入

时间:2012-02-18 03:44:37

标签: python shell window tkinter destroy

我在IDE中的python shell和Tkinter窗口之间出现问题。我想要做的是将所有用户输入都放在shell中,然后我想在Tkinter窗口中输出相应的信息。

然而,当我的窗口出现并弹出时,我关闭它以继续我的程序在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上工作)

2 个答案:

答案 0 :(得分: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

我重新命名了你的根窗口,让你更清楚发生了什么,并删除了超级(imho)额外的Toplevel窗口!

还要记住,没有mainloop和必要的事件处理程序,你将无法完成任何事情!

答案 1 :(得分:1)

简单地说,这不是Tkinter的设计工作方式。 Tkinter被设计为具有一个创建一次的单个根窗口,并且具有正在运行的单个eventloop。以任何其他方式使用它必然会导致不希望的行为。

如果您确实需要以这种方式工作的代码,请在一个进程中从shell收集输入,然后使用单独的进程显示tkinter窗口。您可以使用套接字从另一个进行通信,也可以通过参数或环境变量或临时文件将数据从父级传递给子级。