pygame を使って Web ブラウザを作ろうとしています。HTMLレンダリングにPGUを使用しています。example.comなどの単純なサイトにアクセスすると問題なく動作しますが、 googleなどの 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 変数を出力する行を追加したところ、googleとappleを試したときに「hidden」になりました。タイプが「非表示」のフォーム項目を PGU でレンダリングする方法はありますか?
編集:
type_ が 'hidden' と等しいかどうかを確認するために if ステートメントにセクションを追加した場合、何を入れますか?
編集 2:
PGU では html レンダリングがあまり良くない (javascript コードも表示される) ことに気付いたので、pygame ウィンドウで html をレンダリングする他の方法があるかどうか知りたいです。