Kodi 插件在 window.removeControl() 时崩溃
Kodi add-on crashing on window.removeControl()
我正在开发一个使用自定义覆盖的 Kodi 插件。它现在几乎完全可以工作,除了我每次开始播放视频时遇到的一个运行时错误,在视频中达到 5 秒后(“错误内容: window 中不存在控件”)。下面是 addon.py 的代码:
import xbmc, xbmcaddon, xbmcgui, os
ADDON = xbmcaddon.Addon()
addonpath = ADDON.getAddonInfo('path')
class OverlayBackground(object):
def __init__(self):
self.showing = False
self.window = xbmcgui.Window()
origin_x = 0
origin_y = 0
window_w = self.window.getWidth()
window_h = self.window.getHeight()
self._background = xbmcgui.ControlImage(origin_x, origin_y, window_w, window_h, os.path.join(addonpath,"resources","skins","default","media","background.png"))
def show(self):
self.showing=True
self.window.addControl(self._background)
def hide(self):
self.showing=False
self.window.removeControl(self._background)
def _close(self):
if self.showing:
self.hide()
else:
pass
try:
self.window.clearProperties()
except: pass
if (__name__ == '__main__'):
monitor = xbmc.Monitor()
while not monitor.abortRequested():
if xbmc.Player().isPlaying():
theOverlay = OverlayBackground()
if(xbmc.Player().getTime() < 5):
theOverlay.show()
else:
theOverlay.hide()
xbmc.sleep(1000)
错误来自“self.window.removeControl(self._background)”,如 paste bin 中所述。这看起来很奇怪,因为我确定控件是在 运行 此命令之前添加的,所以我不确定是什么导致此命令使加载项崩溃。
我试着在 Kodi 论坛上寻求帮助,并被告知我需要获得我正在控制的玩家的 ID(并链接到 the documentation for Control),但我没有确定如何实现它,即使在广泛研究文档之后也是如此。
如果能对此做出任何澄清,我将不胜感激。提前致谢!
您需要检查叠加层是否已移除
def show(self):
if not self.showing:
self.showing=True
self.window.addControl(self._background)
def hide(self):
if self.showing:
self.showing=False
self.window.removeControl(self._background)
我正在开发一个使用自定义覆盖的 Kodi 插件。它现在几乎完全可以工作,除了我每次开始播放视频时遇到的一个运行时错误,在视频中达到 5 秒后(“错误内容: window 中不存在控件”)。下面是 addon.py 的代码:
import xbmc, xbmcaddon, xbmcgui, os
ADDON = xbmcaddon.Addon()
addonpath = ADDON.getAddonInfo('path')
class OverlayBackground(object):
def __init__(self):
self.showing = False
self.window = xbmcgui.Window()
origin_x = 0
origin_y = 0
window_w = self.window.getWidth()
window_h = self.window.getHeight()
self._background = xbmcgui.ControlImage(origin_x, origin_y, window_w, window_h, os.path.join(addonpath,"resources","skins","default","media","background.png"))
def show(self):
self.showing=True
self.window.addControl(self._background)
def hide(self):
self.showing=False
self.window.removeControl(self._background)
def _close(self):
if self.showing:
self.hide()
else:
pass
try:
self.window.clearProperties()
except: pass
if (__name__ == '__main__'):
monitor = xbmc.Monitor()
while not monitor.abortRequested():
if xbmc.Player().isPlaying():
theOverlay = OverlayBackground()
if(xbmc.Player().getTime() < 5):
theOverlay.show()
else:
theOverlay.hide()
xbmc.sleep(1000)
错误来自“self.window.removeControl(self._background)”,如 paste bin 中所述。这看起来很奇怪,因为我确定控件是在 运行 此命令之前添加的,所以我不确定是什么导致此命令使加载项崩溃。
我试着在 Kodi 论坛上寻求帮助,并被告知我需要获得我正在控制的玩家的 ID(并链接到 the documentation for Control),但我没有确定如何实现它,即使在广泛研究文档之后也是如此。
如果能对此做出任何澄清,我将不胜感激。提前致谢!
您需要检查叠加层是否已移除
def show(self):
if not self.showing:
self.showing=True
self.window.addControl(self._background)
def hide(self):
if self.showing:
self.showing=False
self.window.removeControl(self._background)