Cetus Group
Cetus Logo
Информационные системы и программное обеспечение




Поддержка

Разработка программного обеспечения средствами языка Python и библиотеки Qt (PyQt)
Размещено 23.12.2005 : Редакция 18.02.2006
А.Г. © Часть 2 - "Реализация обработчиков событий"

Итак, при нажатии на кнопку выдается сообщение. Это указывает на то, что обработчик события уже есть. Его код можно увидеть в файле "form1.py". Имеются две простых возможности реализации полезного обработчика события нажатия на кнопку формы:
-- Внести изменения в существующий обработчик. Это плохой путь!!! При любых изменениях в дизайне формы и ее перегенерации наш обработчик будет утерян.
-- Создать собственную функцию. Т.к. сигнал нажатия уже связан с обработчиком, новый обработчик должен называться так же, как и существующий. Этого можно достичь, создав производный класс от класса формы. По этому пути и пойдем.

1. Создаем производный от формы класс следующего содержания (в файле "form1impl.py"):

# -*- coding: utf-8 -*-

from form1 import *

class Form1Impl(Form1):
    def __init__(self,parent = None,name = None,fl = 0):
        Form1.__init__(self,parent,name,fl)

        if not name:
            self.setName("Form1Impl")

    def newSlot(self):
        print "newSlot"

Для тестирования обработчика вначале просто выводим строку на стандартный вывод (для этого программу нужно выполнить из терминала).

2. Вносим изменения в модуль "main.py" с целью активизации нового класса:

#!/usr/bin/python

import sys
from form1impl import *

app=QApplication(sys.argv)
form=Form1Impl()
app.setMainWidget(form)
form.show()
app.exec_loop()

3. Проверяем. Если все работает (на терминал при нажатии на кнопку выводится сообщение "newSlot") движемся дальше, иначе ищем ошибки. Если все работает, возвращаемся к коду слота "newSlot" в файле "form1impl.py" и вносим в функцию "newSlot" такие изменения:

# -*- coding: utf-8 -*-

from form1 import *

class Form1Impl(Form1):
    def __init__(self,parent = None,name = None,fl = 0):
        Form1.__init__(self,parent,name,fl)

        if not name:
            self.setName("Form1Impl")

    def newSlot(self):
        self.textLabel1.setText(self.lineEdit1.text())

4. Выполняем, проверяем результаты. На этом все.


Copyright©2005, Cetus Group . All rights reserved.