メディアオーバーレイを処理するために、epubリーダーを更新しようとしています。実行するには、オーバーレイのオーディオを再生すると同時に、読み込まれるテキストを強調表示するという2つのことがあります。オーディオを再生するのは難しくありませんでした。私はpydubモジュールを使ってmp3ファイルやmp4ファイルを切り出し、順番に再生しました。 epubのコンテンツを表示するために、私はgi.repositoryからWebKit.Webviewを使用します。これにより、DOMドキュメントにアクセスできるようになり、DOMドキュメントに含まれる要素を修正することができます。代わりに、私はJavascriptを使用して同じ効果を達成することができます。PythonスレッドまたはサブプロセスでDOMにアクセスする方法
しかし、これはメインの実行スレッドでは機能しますが、メインプロセスからフォークすると、別のスレッドでも、別のプロセスであっても実行されません。
がfrom multiprocessing import Process
def on_access_dom(self, widget, data=None):
if __name__ == '__main__':
p = Process(target=self.jsdom)
p.start()
p.join()
#self.jsdom()
def jsdom(self):
cmd = '''node = document.getElementById("f003");
node.innerHTML="<span style='color: red'>red text</span>"; '''
self.viewer.execute_script(cmd)
アイデアがちょうど赤でテキストを表示することです: 問題を説明するために、私はこれを試してみました。私は後で、epubにCSSで指定された色を使用します。上記の私はjavascriptを使用しています。代わりに、新しいプロセスや新しいスレッドを開始すると、私はメインスレッドで直接jsdomまたはtrydomのいずれかを実行する場合は代わりに私が今
def trydom(self):
dom = self.domdoc
text_id = 'f003'
node = dom.get_element_by_id(text_id)
text = node.get_outer_html()
angle = text.find('>')
start = text[:angle]+' style="color: red">'
text = text[angle+1:]
node.set_outer_html(start+text)
によって機能jsdomを置き換えることができます。それは必要に応じてすべて動作します。しかし、新しいスレッドやプロセスでは何も起こりません。
何か不足していますか?スレッドには適用されるはずのGILがどのように犯人になるかわかりませんが、フォークされたプロセスには適用されません。
喜んでお寄せいただきありがとうございます。