【发布时间】:2013-09-11 04:49:29
【问题描述】:
我有一个 PySide 应用程序,它在 QWidget 中托管一个 VLC MediaPlayer 实例。当应用程序通过 QMainWindow 的关闭事件或使用 QApplication.quit() 关闭时,UI 消失,然后我得到一个 Windows 对话框“python.exe 已停止工作”。
QApplication 托管一个自定义 QMainWindow 类,其中包含一个自定义 QWidget(它处理所有 UI 任务,其中 QMainWindow 处理线程之间的消息传递 - 应用程序记录击键并在后台线程中写入输出文件)。还有一个运行主 QWidget 的计时器,它使用视频中的当前位置更新 LineEdit。
无论是否正在写入文件都会发生崩溃(代码被注释掉)。
我是否需要执行某种类型的垃圾回收,或者可能按特定顺序处理我的对象?我尝试停止计时器,将 MediaPlayer、Instance 和承载 MediaPlayer 的帧全部设置为 None,然后销毁帧 (self.videoFrame.destroy()),但应用程序仍然崩溃。
基本代码基于来自 vlc 的 repo example 的示例 Qt 应用程序,它没有特殊的垃圾收集或对象处理。
我在 Windows XP 上运行 Python 2.6。现在我直接从命令行运行 Python,但是一旦我修复了这个崩溃,就设置它使用 Py2Exe 创建一个 exe。
【问题讨论】:
-
使用 PyQt 或 PySide 或两者都会发生这种情况吗? PySide 在对象生命周期方面存在一些已知问题。
-
PySide,我还没试过 PyQt。我用 PyQt 标记了这个问题,因为这些库非常相似。即使我打开应用程序、启动视频并立即关闭应用程序,也会发生这种情况。
-
那我建议用 PyQt 试试,只是为了排除 PySide 错误导致问题的可能性。