我在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上工作)
答案 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窗口。您可以使用套接字从另一个进行通信,也可以通过参数或环境变量或临时文件将数据从父级传递给子级。