【问题标题】:Python Tkinter Window Output and Shell InputPython Tkinter 窗口输出和 Shell 输入
【发布时间】:2012-02-18 03:44:37
【问题描述】:

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

但是,当我的窗口创建并弹出时,我关闭它以在 shell 中继续我的程序,然后我继续输入。但是,当我尝试重新初始化我的窗口时。它说窗户已被破坏。我理解这意味着什么,所以我尝试使用一个顶级窗口来输出我可以关闭的信息,并隐藏我的根窗口,但是在我关闭/销毁根窗口之前,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 上工作)

【问题讨论】:

    标签: python shell window tkinter destroy


    【解决方案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
    

    我重命名了你的根窗口,让你更清楚发生了什么,并删除了多余的(恕我直言)额外的顶层窗口!

    另外请记住,如果没有主循环和必要的事件处理程序,您将无法完成任何事情!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多