![我编写了一个用于下载文件的 Python/QT 应用程序。如何才能阻止它在几秒钟后“变灰”?](https://linux22.com/image/822667/%E6%88%91%E7%BC%96%E5%86%99%E4%BA%86%E4%B8%80%E4%B8%AA%E7%94%A8%E4%BA%8E%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6%E7%9A%84%20Python%2FQT%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E3%80%82%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E9%98%BB%E6%AD%A2%E5%AE%83%E5%9C%A8%E5%87%A0%E7%A7%92%E9%92%9F%E5%90%8E%E2%80%9C%E5%8F%98%E7%81%B0%E2%80%9D%EF%BC%9F.png)
以下是要点。应用程序仍在运行,进度条仍会移动,但窗口会变灰,如果我单击 X 关闭它,会弹出一个窗口并显示“窗口 X 没有响应,强制退出吗?”如果我强制退出,窗口会关闭,但我从终端运行它时可以看到应用程序仍在运行。我使用的是 QT 4。
答案1
问题很可能是,当您的下载功能正在运行时,您的应用程序无法响应事件 - 控制权不会返回到主循环。
我认为最简单的机制是在单独的线程中进行下载,并使用 Qt 的信号和槽机制来更新进度条(线程不能直接与用户界面交互)。
此外,与打开文件来写出 HTTP 响应相比,您可能会发现使用如下函数更有效urllib.urlretrieve直接写入文件。
答案2
听起来窗口没有被销毁。这是应用程序的主窗口还是某种对话框?
如果它是一个对话框,请确保在调用窗口对象之后、下一行或者在获取窗口的返回值之后调用“window_object.destroy()”。
如果它是您的主窗口,您可能想要修改 X 按钮的回调方法,用某种方法来销毁您的窗口,也许是 self.destroy()?