在 pyqt5 中关闭选项卡后声音继续
Sound continues after tab close in pyqt5
我正在使用 pyqt5 制作一个网络浏览器只是为了好玩,我发现当我关闭一个选项卡时,该选项卡中正在播放的音频会继续播放,直到我退出浏览器。有什么解决办法吗?
编辑:
def close_current_tab(self, i):
if self.tabs.count() < 2:
return
self.tabs.removeTab(i)
如 removeTab()
文档中所述:
The page widget itself is not deleted.
这意味着小部件将继续存在(并继续在后台工作,从而播放音频并不必要地使用 CPU/memory),即使它不再可见。
为了正确地删除对象,您需要在删除选项卡之前检索它(否则您将无法获取它参考),然后调用 deleteLater()
:
def close_current_tab(self, i):
if self.tabs.count() < 2:
return
page = self.tabs.widget(i)
self.tabs.removeTab(i)
page.deleteLater()
请注意,只要删除 Qt 对象就应该执行此操作,并且该操作不会专门删除该对象,因此您必须始终阅读文档以验证这一点。
这对于浏览器页面显然极其重要,因为它们可能会使用大量内存:现代网页大约需要 10 -20mb(查看浏览器的任务管理器),对于流媒体服务和社交网络等复杂网站,有些会高达 100-150mb(Facebook 主页在显示 15-20 个帖子后需要超过 150mb);打开和关闭其中的许多页面而不删除它们,几秒钟内您的程序将使用超过 1 GB 的内存和大量 CPU 的使用,因为许多网站即使在不可见的情况下也会进行一些处理(动态更新、推送通知、视频解码、横幅加载等)。
我正在使用 pyqt5 制作一个网络浏览器只是为了好玩,我发现当我关闭一个选项卡时,该选项卡中正在播放的音频会继续播放,直到我退出浏览器。有什么解决办法吗?
编辑:
def close_current_tab(self, i):
if self.tabs.count() < 2:
return
self.tabs.removeTab(i)
如 removeTab()
文档中所述:
The page widget itself is not deleted.
这意味着小部件将继续存在(并继续在后台工作,从而播放音频并不必要地使用 CPU/memory),即使它不再可见。
为了正确地删除对象,您需要在删除选项卡之前检索它(否则您将无法获取它参考),然后调用 deleteLater()
:
def close_current_tab(self, i):
if self.tabs.count() < 2:
return
page = self.tabs.widget(i)
self.tabs.removeTab(i)
page.deleteLater()
请注意,只要删除 Qt 对象就应该执行此操作,并且该操作不会专门删除该对象,因此您必须始终阅读文档以验证这一点。
这对于浏览器页面显然极其重要,因为它们可能会使用大量内存:现代网页大约需要 10 -20mb(查看浏览器的任务管理器),对于流媒体服务和社交网络等复杂网站,有些会高达 100-150mb(Facebook 主页在显示 15-20 个帖子后需要超过 150mb);打开和关闭其中的许多页面而不删除它们,几秒钟内您的程序将使用超过 1 GB 的内存和大量 CPU 的使用,因为许多网站即使在不可见的情况下也会进行一些处理(动态更新、推送通知、视频解码、横幅加载等)。