PyQt4 GUI 关闭后关闭打开的控制台

Posted

技术标签:

【中文标题】PyQt4 GUI 关闭后关闭打开的控制台【英文标题】:Close open console after PyQt4 GUI close 【发布时间】:2016-04-22 10:43:47 【问题描述】:

我用 cx_Freeze 创建了一个 python 程序的 exe。 我已经使用 PyQt4 创建了一个 GUI。

它完美打开,首先是一个空控制台,然后是 GUI。 但是,当我关闭 GUI 时(无论是否运行程序),控制台仍保持打开状态。如果我点击控制台的任何部分,它会给我一个错误弹出窗口“MyProgram has stop working”

这已经在一个安装了 python (3.4.4) 的系统 (Win7-64bit) 和另一个没有 python (Win7-64bit) 的系统上进行了测试。

有什么方法可以在关闭 GUI 后关闭此控制台?或者更好...如何关闭控制台?

开发环境 Python : 3.4 操作系统:Windows 7

编辑

我设法找到了解决方法......在我的 close_application 方法中,我包含了使用 psutil 来终止进程的行。这在我通过 UI 按钮关闭时有效,但在我单击窗口右上角的“x”时无效

谢谢

【问题讨论】:

【参考方案1】:

我认为您需要将单击“x”右上角按钮的事件与杀死进程行联系起来。

这个话题可能有帮助吗? PySide / PyQt detect if user trying to close window

【讨论】:

非常感谢,这个链接有帮助,我重写了 closeEvent() 方法来清理关闭过程【参考方案2】:

我正在使用 wxPython 并遇到了同样的问题。我找到的解决方案是将 main 函数包装在 sys.exit 子句中。 所以我的 main.py 看起来像这样:

import sys
import wx

class MyFrame(wx.Frame):
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Close Me")
        panel = wx.Panel(self)

        closeBtn = wx.Button(panel, label="Close")
        closeBtn.Bind(wx.EVT_BUTTON, self.onClose)

    def onClose(self, event):
        self.Destroy()

def main():
    app = wx.App(False)
    frame = MyFrame()
    frame.Show()
    app.MainLoop()


if __name__ == '__main__':
    sys.exit(main())

【讨论】:

以上是关于PyQt4 GUI 关闭后关闭打开的控制台的主要内容,如果未能解决你的问题,请参考以下文章

控制台应用程序在 Visual Studio 中打开后立即关闭

一旦程序完成并在 1 次击键后关闭,是不是有办法让控制台窗口保持打开状态?

控制台应用程序比 GUI 应用程序运行得更快吗? [关闭]

在模拟期间通过 GUI 读取用户的输入 [关闭]

c#中,如何实现一个按钮控制另一个窗口的打开和关闭,即点击一下,新窗口打开,再点击一下,打开的新窗

使用winapi进行远程程序控制[关闭]