PGU HTML 渲染器无法渲染大多数网站

2 投票
1 回答
613 浏览
提问于 2025-04-15 23:36

我正在尝试用pygame制作一个网页浏览器。我使用PGU来渲染HTML。当我访问一些简单的网站,比如example.com时,一切都很顺利。但是当我尝试加载一些更复杂的网站,比如google,我就遇到了一个错误:

UnboundLocalError: local variable 'e' referenced before assignment

我查看了PGU的HTML渲染文件,发现了这段代码:

def start_input(self,attrs):
    r = self.attrs_to_map(attrs)
    params = self.map_to_params(r) #why bother
    #params = {}

    type_,name,value = r.get('type','text'),r.get('name',None),r.get('value',None)
    f = self.form
    if type_ == 'text':
        e = gui.Input(**params)
        self.map_to_connects(e,r)
        self.item.add(e)
    elif type_ == 'radio':
        if name not in f.groups:
            f.groups[name] = gui.Group(name=name)
        g = f.groups[name]
        del params['name']
        e = gui.Radio(group=g,**params)
        self.map_to_connects(e,r)
        self.item.add(e)
        if 'checked' in r: g.value = value
    elif type_ == 'checkbox':
        if name not in f.groups:
            f.groups[name] = gui.Group(name=name)
        g = f.groups[name]
        del params['name']
        e = gui.Checkbox(group=g,**params)
        self.map_to_connects(e,r)
        self.item.add(e)
        if 'checked' in r: g.value = value

    elif type_ == 'button':
        e = gui.Button(**params)
        self.map_to_connects(e,r)
        self.item.add(e)
    elif type_ == 'submit':
        e = gui.Button(**params)
        self.map_to_connects(e,r)
        self.item.add(e)
    elif type_ == 'file':
        e = gui.Input(**params)
        self.map_to_connects(e,r)
        self.item.add(e)
        b = gui.Button(value='Browse...')
        self.item.add(b)
        def _browse(value):
            d = gui.FileDialog();
            d.connect(gui.CHANGE,gui.action_setvalue,(d,e))
            d.open();
        b.connect(gui.CLICK,_browse,None)

    self._locals[r.get('id',None)] = e

我在最后一行得到了错误,因为e这个变量没有定义。我猜测原因是用来检查输入类型并创建e变量的if语句没有匹配到任何东西。我添加了一行代码来打印_type变量,当我尝试访问googleapple时,得到了'hidden'。请问有没有办法用PGU渲染类型为'hidden'的表单项呢?

编辑:
如果我在if语句中添加一个部分来检查type_是否等于'hidden',我应该在里面写什么呢?
编辑2:
我意识到PGU的HTML渲染效果不是很好(甚至会显示javascript代码),所以我想知道有没有其他方法可以在pygame窗口中渲染HTML。

1 个回答

1

我觉得可以把PyGame嵌入到PyQT窗口里。不过,这种方法算是一种变通的做法,并不是特别优雅的解决方案。

撰写回答