2010-06-05 91 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。儘管如此,這不僅僅是一個優雅的解決方案。