0

我对python类很陌生,并没有真正使用它们,所以请随时指出除我指出的错误之外的任何其他错误。

我想要实现的是UI in Kodi使用该pyxbmct模块的新功能。我正在发送一个列表(仍然没有弄清楚我将如何使用模式将拆分排序到下一个进程,但这是下一个任务)

我的清单是这样的:

List = [['[COLOR darkgoldenrod][I]Search[/I][/COLOR]','',904,'http://icons.iconarchive.com/icons/icontexto/search/256/search-red-dark-icon.png','','',''],
['[COLOR darkgoldenrod][I]Menu Test[/I][/COLOR]','',905,'http://icons.iconarchive.com/icons/icontexto/search/256/search-red-dark-icon.png','','','']]
process.Window_Menu_Class(List)

然后显然被发送到 Window_Menu_Class() 以尝试在列表中显示名称,并在右侧显示一个图标,但根据您在列表中的焦点位置交替显示。

Window_Menu_Class 的代码:-

import pyxbmct
List = []

class Window_Menu_Class():

    fanart = 'http://www.wall321.com/thumbnails/detail/20121108/creepy%20video%20games%20castles%20diablo%20tristram%20creep%20diablo%20iii%20sanctuary%201920x1080%20wallpaper_www.wall321.com_92.jpg'
    iconimage = ICON
    power = 'http://herovision.x10host.com/fb_replays/power.png'
    power_focus = 'http://herovision.x10host.com/fb_replays/power_focus.png'
    text = '0xffffffff'
    window_menu  = pyxbmct.AddonDialogWindow('')
    Background=pyxbmct.Image(fanart)
    Icon=pyxbmct.Image('', aspectRatio=2)
    button = pyxbmct.Button('', noFocusTexture=power,focusTexture=power_focus)
    window_menu.setGeometry(1250, 650, 100, 50)
    nameList = pyxbmct.addonwindow.List(_space=11,_itemTextYOffset=0,textColor=text)
    window_menu.connect(button, window_menu.close)
    window_menu.connect(pyxbmct.ACTION_NAV_BACK, window_menu.close)
    window_menu.placeControl(Background, -5, 0, 110, 51)
    window_menu.placeControl(nameList, 65, 1, 50, 20)
    window_menu.placeControl(Icon, 30, 30, 60, 18)    
    name_list = [];    url_list = [];    mode_list = [];    iconimage_list = [];    fanart_list = [];    desc_list = [];    extra_list = []

def __init__(self,List):
    self.Window_Menu(List)

def Window_Menu(self,List):
    for item in List:
        name = item[0]
        url = item[1]
        mode = item[2]
        iconimage = item[3]
        fanart = item[4]
        desc = item[5]
        extra = item[6]
        if not name in self.name_list:
            self.nameList.addItem(name);self.name_list.append(name);self.url_list.append(url);self.mode_list.append(mode);self.iconimage_list.append(iconimage);self.fanart_list.append(fanart);self.desc_list.append(desc);self.extra_list.append(extra)
            self.create_window(name,url,mode,iconimage,fanart,desc,extra)
    self.window_menu.doModal()


def create_window(self,name,url,mode,iconimage,fanart,desc,extra):
    self.window_menu.setFocus(self.nameList)
    self.window_menu.connectEventList(
    [pyxbmct.ACTION_MOVE_DOWN,
    pyxbmct.ACTION_MOVE_UP,
    pyxbmct.ACTION_MOUSE_MOVE],
    self.LIST_UPDATE(name,url,mode,iconimage,fanart,desc,extra))


def LIST_UPDATE(self,name,url,mode,iconimage,fanart,desc,extra):
    if self.window_menu.getFocus() == self.nameList:
        pos=self.nameList.getSelectedPosition()
        Iconimg=self.iconimage_list[pos]
        Fanart =self.fanart_list[pos]
        self.Icon.setImage(Iconimg)
        self.Background.setImage(Fanart)

但我收到错误 -

文件“C:\Users*\AppData\Roaming\Kodi\addons\plugin.video.sanctuary\lib\process.py”,第 74 行,在 LIST_UPDATE 如果 self.window_menu.getFocus() == self.nameList: RuntimeError:不存在的控件 0

如果我对它进行哈希处理,if self.window_menu.getFocus() == self.nameList:那么它可以工作,但是,当您转到下一个项目时,它不会改变列表中的图像,我有一个工作版本,但它都是在一个 .py 文件中完成的,不需要在全部,但是现在我试图将代码分成不同的 .py 文件,我需要创建一个类来包含所有信息并给出一个起点。希望这是足够的信息,并感谢任何反馈。

4

1 回答 1

0

您的问题没有简单的答案,因为您在 Python 级别和 PyXBMCt 级别都做错了(我是 PyXBMCt 的作者,顺便说一句)。

首先,我强烈建议你学习 Python 类:它们是如何定义的、如何初始化的、如何使用的。

当您按顺序完成时,我强烈建议您阅读 PyXBMCt 文档,该文档现在托管在此处:http ://romanvm.github.io/script.module.pyxbmct/查看示例,包括示例插件,它显示了如何使用 PyXBMCt。例如,这是什么window_menu.placeControl(Background, -5, 0, 110, 51)?PyXBMCt 不使用像素,它将控件放置在具有行和列的网格中,您需要先设置网格。

无论如何,我建议先从 Python 开始。

于 2016-10-16T07:47:07.027 回答