Подключить форму WebKit WebView к обратному вызову Python?

Ubuntu Xenial устанавливает GnuPG 2.1.11, который доступен как gpg2 двоичный файл. Существует gpg, который из версии 1.14. Последняя версия 2.1.15. Вам нужно установить его из исходного кода, компилируя, если вы хотите эту версию.

Чтобы скомпилировать исходный код, вам нужно сначала получить обновленные библиотеки этих пакетов -

npth         (ftp://ftp.gnupg.org/gcrypt/npth/)
libgpg-error (ftp://ftp.gnupg.org/gcrypt/libgpg-error/)
libgcrypt    (ftp://ftp.gnupg.org/gcrypt/libgcrypt/)
libksba      (ftp://ftp.gnupg.org/gcrypt/libksba/)
libassuan    (ftp://ftp.gnupg.org/gcrypt/libassuan/)

1. Установка npth

Загрузите версию 1.2 из npth
wget ftp://ftp.gnupg.org/gcrypt/npth/npth-1.2.tar.bz2
Распаковать
tar xf npth-1.2.tar.bz2
Перейдите к его директории и постройте его
cd npth-1.2  
./configure
make
sudo make install

1. Установка npth

Загрузите версию 1.2 из npth
wget ftp://ftp.gnupg.org/gcrypt/npth/npth-1.2.tar.bz2

Загрузите версию 1.2 из npth

tar xf libgpg-error-1.24.tar.bz2
cd libgpg-error-1.24
./configure
make
make check
sudo make install

Распаковать, cd в каталог, настроить, сделать & amp; install

Загрузите версию 1.2 из npth

tar xf libgpg-error-1.24.tar.bz2
cd libgpg-error-1.24
./configure
make
make check
sudo make install
Распаковать
tar xf npth-1.2.tar.bz2
[d18 ] 3. Установить libgcrypt

Загрузить версию 2.3.4
wget https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2

Распаковать

tar xf libassuan-2.4.3.tar.bz2
cd libassuan-2.4.3
./configure
make
sudo make install

4. Установите libassuan

Загрузите версию 2.3.4
wget https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2

Загрузите версию 2.3.4

tar xf libksba-1.3.4.tar.bz2        
cd libksba-1.3.4
./configure
make
sudo make install

Распаковать, cd в каталог, настроить, сделать & amp; установить

Загрузить версию 2.3.4

tar xf libksba-1.3.4.tar.bz2        
cd libksba-1.3.4
./configure
make
sudo make install

Unpack

tar xf libassuan-2.4.3.tar.bz2
cd libassuan-2.4.3
./configure
make
sudo make install
[ ! d41]

3. Установить libgcrypt

sudo ldconfig

Распаковать, cd в каталог, настроить, сделать & amp; install

gpg2 --version

4. Установить libassuan

which gpg2

После установки вы должны заполнить, проверьте версию. Но перед этим используйте эту команду для загрузки новых установленных библиотек.

/usr/local/bin/gpg2

Затем, чтобы проверить версию

31
задан 22 January 2012 в 02:45

1 ответ

Способы связи из встроенного виджета WebKit в управляющую программу Python

Gtk или Qt:

  • установить window.status из JavaScript ; захватить соответствующее событие в Python
  • set document.title из JavaScript; ловушка соответствующего события в Python
  • перенаправляет страницу на собственный URL (например, x-my-app:thing1/thing2/thing3); trap navigation-policy-decision-requested в Python и посмотреть URL-адрес, на который он направлен, и справиться с ним, если это ваша настраиваемая схема URL

Только Qt:

Методы, которые теоретически должны работать, но на практике не очень хорошо

  • Пожар пользовательского события DOM в HTML-элементе (который будет включать объект документа) от JavaScript; захватить это событие в Python, перемещая WebKit DOM с Python и прослушивая события. Это работает, но я не могу найти способ, чтобы Python мог считывать пользовательские данные из события, а это значит, что вы не можете передавать информацию, отличную от события, которое было запущено.

Способы связи с Python на JavaScript

  • используют webview.execute_script(js_code). Обратите внимание: если вы передаете переменные значения в JS, это хорошая идея для JSON кодировать их; таким образом, вы можете немного беспокоиться об экранировании, а JS может читать JSON изначально

Вот пример кода Gtk:

from gi.repository import Gtk,WebKit
import json

w = Gtk.Window()
v = WebKit.WebView()
sw = Gtk.ScrolledWindow()
w.add(sw)
sw.add(v)
w.set_size_request(400,300)
w.connect("destroy", lambda q: Gtk.main_quit())
def window_title_change(v, param):
    if not v.get_title():
        return
    if v.get_title().startswith("msgtopython:::"):
        message = v.get_title().split(":::",1)[1]
        # Now, send a message back to JavaScript
        return_message = "You chose '%s'. How interesting." % message
        v.execute_script("jscallback(%s)" % json.dumps(return_message))
v.connect("notify::title", window_title_change)
v.load_html_string("""<!doctype html>
<html>
<head>
<title>A demo</title>
<style>
body { font-family: Ubuntu, sans-serif; }
h1 { font-size: 1.3em; }
</style>
<body>
<h1>A tiny JavaScript demonstration</h1>
<form>
<p>What's your favourite thing about Jono? <select>
    <option>------choose one------</option>
    <option>his beard</option>
    <option>his infectious sense of humour</option>
    <option>his infectious diseases</option>
    <option>his guitar ability</option>
    <option>his wife</option>
</select></p>
</form>
<p id="out"></p>

<script>
document.querySelector("select").addEventListener("change", function() {
    var chosenOption = this.options[this.selectedIndex].text;
    // Now send that text back to Python by setting the title
    document.title = "msgtopython:::" + chosenOption;
}, false);
function jscallback(msg) {
    document.getElementById("out").innerHTML = msg;
}
</script>

</body>
</html>
""", "file:///")
w.show_all()
Gtk.main()
30
ответ дан 6 August 2018 в 02:19

Другие вопросы по тегам:

Похожие вопросы: