Создать меню PyQt из списка строк

SSL выполняется перед анализом заголовка, это означает:

Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed

Запрос выглядит примерно так (не помню точный синтаксис, но это должно быть достаточно близко):

GET /search?q=qwerty HTTP/1.1
Host: www.google.de

Именно поэтому наличие разных SSL-сертификатов для нескольких хостов на одном и том же IP-адресе является проблематичным, запрошенное имя хоста неизвестно до дешифрования.

10
задан HostileFork 7 January 2010 в 22:39
поделиться

2 ответа

Вы встречаетесь с тем, что часто упоминается (возможно, не совсем педантично ;-) как «проблема области видимости» в Python - привязка запаздывает (лексический поиск во время вызова ) в то время как вы хотели бы это пораньше (по умолчанию). Итак, где у вас теперь есть:

    for item in menuitems:
        entry = menu.addAction(item)
        self.connect(entry,QtCore.SIGNAL('triggered()'), lambda: self.doStuff(item))

попробуйте вместо этого:

    for item in menuitems:
        entry = menu.addAction(item)
        self.connect(entry,QtCore.SIGNAL('triggered()'), lambda item=item: self.doStuff(item))

Это "предвосхищает" привязку, поскольку значения по умолчанию (как здесь item ) вычисляются один раз и навсегда в определенный момент времени. Добавление одного уровня вложенности функций (например, двойной лямбды) тоже работает, но здесь это немного излишне! -)

В качестве альтернативы вы можете использовать functools.partial (self.doStuff, item) ( с import functools вверху, конечно), что является еще одним прекрасным решением, но я бы выбрал самый простой (и самый распространенный) "

23
ответ дан 3 December 2019 в 16:30
поделиться

Это должно сработать, но я почти уверен, что есть способ получше, который я сейчас не припомню.

def do_stuff_caller(self, item):
    return lambda: self.doStuff(item)

...
self.connect(entry, QtCore.SIGNAL('triggered()'), self.do_stuff_caller(item))

Правка : Более короткая версия, я все еще не об этом думаю ... или, может быть, она была на другом языке? :)

(lambda x: lambda self.do_stuff(x))(item)
2
ответ дан 3 December 2019 в 16:30
поделиться
Другие вопросы по тегам:

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