2010-06-05 90 views
2

我正在尝试使用pygame制作网页浏览器。我正在使用PGU进行html渲染。它工作正常,当我访问简单的网站,如example.com,但是当我尝试加载任何使用HTML表单,像google更复杂,我得到这个错误:PGU HTML渲染器无法渲染大多数网站

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时,我得到了“隐藏”。有没有办法呈现PGU类型为“隐藏”的表单项?

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

回答

1

我认为可以在PyQT窗口中嵌入PyGame。尽管如此,这不仅仅是一个优雅的解决方案。