Рубрики
Без рубрики

Pyside: подключение нескольких виджетов к тому же слоту

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Как я учусь Pyqt и Pyside, я пишу некоторые учебники, чтобы помочь своим попутчикам. Сегодня мы посмотрим, как подключить несколько виджетов к тому же слоту. Другими словами, мы будем связывать сигналы виджетов (в основном событиях) к слотам (то есть озвоно, такие как функции, методы), которые более известны как «обработчики событий». Да, я знаю в земельном участке, что вы не называете этого. Это слот, а не обработчик событий. Но я расступлен. Во всяком случае, есть два способа подойти к этому. Одним из состоит в том, чтобы использовать Functools и его частичный класс для передачи параметров или использовать способности анноспекции Pyside, чтобы захватить эту информацию из виджета, которая позволила позвонить. На самом деле есть хотя бы один другой метод, который очень похож на Functools.partial, и это необходимо использовать печально известную утилиту анонимной функции, известную как лямбда. Давайте посмотрим, как все эти методы могут быть сделаны!

Начиная

Если у вас еще нет Pyside, выйдите и получите его. Если вы хотите попробовать это с PYQT, убедитесь, что ваша версия PYQT составляет 4,3 или больше, поскольку первый пример частичной в следующем приложении приложения не будет работать в предыдущих версиях PYQT. Вы можете получить Pyside здесь Отказ Как только вы все настроите и готов к роску, идите вперед и прочитайте следующий код:

Давайте проведем немного времени, сломав это. Мы подкласс Qwidget, чтобы создать наше окно. Затем мы используем QVBoxLayout для макета наших виджетов в вертикальном строке. Далее мы создаем этикетку и четыре кнопки. Первая кнопка, которую мы подключаем к обработчику события, выполняется нормально. В один Обработчик, это просто обновляет ярлык, чтобы сказать, что «вы нажали один!». Вы можете сделать это для других 3 кнопок, но это не точка этой статьи. Вместо этого мы используем Python’s Functools Библиотека, которая имеет очень удобное Частичный класс. Частичный класс позволяет разработчику создать Callable, который вы можете дать вашему сигналу Pyside. Первый пример создает частичный Callable, который недоступна для всего остального. 2-й пример (кнопка 3) частичного назначена переменной класса, Self.BTN3Callback Затем вы можете дать вашему сигналу. Последний пример (кнопка 4) показывает, как сделать то же самое, что и частично, но вместо этого используя лямбда Python. Этот последний метод особенно популярен с помощью Tkinter GUI Toolkit.

Теперь мы готовы выяснить, как заставить сам тьсид расскажет, какая кнопка сигнализировала слот.

Как сделать Pyside рассказать все

Мы на самом деле собираемся ревертировать код, чтобы сделать код короче и показать вам еще один способ накладывания ваших виджетов. На этот раз мы также собираемся все кнопки подключаться только к одному слоту (I.E. Обработчик событий/Callble). Вот код:

Хорошо, импорт сейчас немного короче, так как нам больше не нуждаются в Functools. Вниз в __init__ Мы создаем список ярлыков кнопок, а затем зацикливаться над ними, чтобы создать четыре кнопки. В цикле мы также подключаем кнопку до Callable (или сигнала в слот) и добавить виджет в менеджер макета. Согласно Марке Найнфилд, автор Быстрое программирование GUI с Python и Pyqt Говорит в своей книге, что Callable (слот) должен быть назван таким же, как сигнал, как то, что является Конвенцией PYQT. Я предполагаю, что это конвенция в Писиде тоже, поэтому мы придерживаемся.

В нашем нажал Метод/сигнал/Callable/Что бы мы ни используем self.sender () Чтобы схватить объект кнопки из всего, что требует метода. Тогда, просто чтобы быть в безопасности, мы уверены, что отправитель является экземпляром QPushButton и, если оно есть, то мы снимаем метку кнопки через ее Текст () Позвоните и установите ярлык соответствующим образом. Это оно! Короткий и сладкий!

Упаковка

Теперь вы знаете несколько способов передавать аргументы в слот/обработчик. Вы также узнали, как спросить Pyside, виджет, который называется Callable. Теперь вы можете выбраться туда и записать несколько прохладных вещей самостоятельно.

Дополнительное чтение

Скачать источник

  • pyside_passingargstoslots.zip.