Skip to main content
 首页 » 编程设计

python之PGU HTML Renderer 无法呈现大多数网站

2025年05月04日8youxin

我正在尝试使用 pygame 制作一个网络浏览器。我正在使用 PGU 进行 html 渲染。当我访问简单的网站时它工作正常,比如 example.com ,但是当我尝试加载任何使用 html 表单的更复杂的东西时,比如 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 变量,当我尝试 google 时我被“隐藏”了和 apple .有什么方法可以使用 PGU 呈现类型为“隐藏”的表单项吗?

编辑:
如果我在 if 语句中添加一个部分来检查 type_ 是否等于 'hidden',我会在里面放什么?
编辑 2:
我已经意识到 PGU 的 html 呈现不是很好(它甚至显示 javascript 代码),所以我想知道是否有任何其他方式在 pygame 窗口中呈现 html。

请您参考如下方法:

我认为可以将 PyGame 嵌入到 PyQT 窗口中。不过,与优雅的解决方案相比,这更像是一种变通方法。