Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
• Новости
• Последние поступления
• Книжный магазин
  Hardware:
• Видеоустройства
• Системные платы
• Процессоры
• Мобильные устройства
• Аудиосистема
• Охлаждение системы
• Накопители информации
• КПК и ноутбуки
• Телефоны и связь
• Периферия
• Система
• Сети
• Разные устройства
 
  Programming:
• Web-разработка
• Языки программирования
• Технологии и теория
• Разработка игр
• Программная инженерия
 
  Software:
• Операционные системы
• Windows 7
• Базы данных
• Обзоры программ
• Графика и дизайн
   
  Life:
• Компьютерная жизнь
• Разные материалы
   
• Партнеры
• Публикация
• Правовая информация
• Реклама на сайте
• Обратная связь
• Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



PyQt4 - Сигналы и события

Раздел: Programming / Python @ 07.08.2008 | Ключевые слова: python pyqt4 qui версия для печати

Автор: перевод Amka
Источник: habrahabr

События
События это важная часть GUI программирования. События генерируются пользователями или же системой. Когда мы вызываем метод exec() приложение запускает основной цикл. Он получаем события и отправляет их объектам. Trolltech представляет уникальный механизм сигналов и слотов.

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

#!/usr/bin/python

import sys
from PyQt4 import QtGui, QtCore

class SigSlot(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle(`signal & slot`)

        lcd = QtGui.QLCDNumber(self)
        slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(slider)

        self.setLayout(vbox)
        self.connect(slider, QtCore.SIGNAL(`valueChanged(int)`),
            lcd, QtCore.SLOT(`display(int)`) )

        self.resize(250, 150)

app = QtGui.QApplication(sys.argv)
qb = SigSlot()
qb.show()
sys.exit(app.exec_())

В данном случае мы отображаем бегунок и LCD циферблат. Номер на циферблате изменяется перетаскиванием бегунка.

self.connect(slider, QtCore.SIGNAL(`valueChanged(int)`),
    lcd, QtCore.SLOT(`display(int)`))

Здесь мы соединяем сигнал бегунка valueChanged() со слотом display() циферблата.
Метод connect() имеет четыре параметра. Sender(отправитель) — объект который отправляет сигнал. Signal (сигнал) — генерируемый сигнал. Receiver(получатель) — объект, который получает сигнал. Slot (слот) — метод, который реагирует на сигнал.
Сигналы и слоты

Изменение обработчика события
События в PyQt4 обрабатываются в зачастую с помощью изменения обработчиков событий.

#!/usr/bin/python

import sys
from PyQt4 import QtGui, QtCore

class Escape(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle(`escape`)
        self.resize(250, 150)
        self.connect(self, QtCore.SIGNAL(`closeEmitApp()`), QtCore.SLOT(`close()`) )

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

app = QtGui.QApplication(sys.argv)
qb = Escape()
qb.show()
sys.exit(app.exec_())

В нашем примере мы реинициализируем обработчик события keyPressEvent().

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_Escape:
        self.close()

Если мы щелкаем по кнопке Escape, то мы закроем приложение.

Генерирование сигналов
Объекты создаваемые из QtCore.QObject могут генерировать сигналы. Если мы щелкаем по кнопке, гененрируется сигнал clicked(). В следующем примере мы покажем как это сделать.

#!/usr/bin/python

import sys
from PyQt4 import QtGui, QtCore

class Emit(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle(`emit`)
        self.resize(250, 150)
        self.connect(self, QtCore.SIGNAL(`closeEmitApp()`), QtCore.SLOT(`close()`) )

def mousePressEvent(self, event):
self.emit(QtCore.SIGNAL(`closeEmitApp()`))

app = QtGui.QApplication(sys.argv)
qb = Emit()
qb.show()
sys.exit(app.exec_())

Мы создаём новый сигнал closeEmitApp(). Этот сигнал генерируется когда происходит нажатие кнопки мышки.

def mousePressEvent(self, event):
    self.emit(QtCore.SIGNAL(`closeEmitApp()`))

Сигнал создаётся с помощью метода emit().

self.connect(self, QtCore.SIGNAL(`closeEmitApp()`), QtCore.SLOT(`close()`))

Здесь мы соединяет созданный нами сигнал closeEmitApp() со слотом close().

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Programming / Python


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.