PyQt, отправляющий параметр к слоту при соединении с сигналом

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

if (buffer.IndexOf('\u2013') > -1) buffer = buffer.Replace('\u2013', '-'); // en dash
if (buffer.IndexOf('\u2014') > -1) buffer = buffer.Replace('\u2014', '-'); // em dash
if (buffer.IndexOf('\u2015') > -1) buffer = buffer.Replace('\u2015', '-'); // horizontal bar
if (buffer.IndexOf('\u2017') > -1) buffer = buffer.Replace('\u2017', '_'); // double low line
if (buffer.IndexOf('\u2018') > -1) buffer = buffer.Replace('\u2018', '\''); // left single quotation mark
if (buffer.IndexOf('\u2019') > -1) buffer = buffer.Replace('\u2019', '\''); // right single quotation mark
if (buffer.IndexOf('\u201a') > -1) buffer = buffer.Replace('\u201a', ','); // single low-9 quotation mark
if (buffer.IndexOf('\u201b') > -1) buffer = buffer.Replace('\u201b', '\''); // single high-reversed-9 quotation mark
if (buffer.IndexOf('\u201c') > -1) buffer = buffer.Replace('\u201c', '\"'); // left double quotation mark
if (buffer.IndexOf('\u201d') > -1) buffer = buffer.Replace('\u201d', '\"'); // right double quotation mark
if (buffer.IndexOf('\u201e') > -1) buffer = buffer.Replace('\u201e', '\"'); // double low-9 quotation mark
if (buffer.IndexOf('\u2026') > -1) buffer = buffer.Replace("\u2026", "..."); // horizontal ellipsis
if (buffer.IndexOf('\u2032') > -1) buffer = buffer.Replace('\u2032', '\''); // prime
if (buffer.IndexOf('\u2033') > -1) buffer = buffer.Replace('\u2033', '\"'); // double prime
28
задан Eli Bendersky 3 June 2009 в 03:53
поделиться

2 ответа

Использовать лямбда

Вот пример из книги PyQt :

self.connect(button3, SIGNAL("clicked()"),
    lambda who="Three": self.anyButton(who))

Кстати, вы также можете использовать functools.partial , но я считаю, что метод лямбда проще и понятнее.

44
ответ дан 28 November 2019 в 03:00
поделиться

В общем, каждый пункт меню должен быть подключен к разному слоту, и каждый слот должен обрабатывать функции только для это собственный пункт меню. Например, если у вас есть такие пункты меню, как «сохранить», «закрыть», «открыть», вам следует сделать отдельный слот для каждого, а не пытаться создать один слот с оператором case в нем.

не хотите делать это таким образом, вы можете использовать функцию QObject :: sender () , чтобы получить указатель на отправителя (то есть: объект, который испустил сигнал). Однако я бы хотел услышать немного больше о том, чего вы пытаетесь достичь.

0
ответ дан 28 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

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