Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: PyQt5. Помогите разобраться со слотами и сигналами.  (Прочитано 2344 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Axa-Ru

  • Автор темы
  • Гость
Никак не разберусь со слотами и сигналами.
Концепцию понимаю. Не понимаю как правильно использовать это.

У меня PyQt5, Python3, Ubuntu.

Я с помощью QT Designer нарисовал MainWindow с кнопкой и StatusBat.

Сгенерил код на python и добавил в него метод msgBtnPushed(self), который должен вызываться при нажатии на кнопку.

Код: (python) [Выделить]
#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'win_mainwnd_03.ui'
#
# Created by: PyQt5 UI code generator 5.2.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(538, 364)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(100, 110, 351, 101))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Исследуем слоты и коннекты"))
        self.pushButton.setText(_translate("MainWindow", "Нажми меня"))

    def msgBtnPushed(self):
        self.statusbar.showMessage("Ух! Нажали!")


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Теперь я должен определить сигнал и указать слот, который должен этот сигнал обрабатывать.
Как указать сигнал, который будет генериться при нажатии на кнопку self.pushButton?

Где и как нужно указать слот, который при поступлении сигнала вызовет метод msgBtnPushed?

И еще один мелкий вопрос. Я использую  Ubuntu и преобразую файл формы в код python следующей командой:

Код: (bash) [Выделить]
pyuic5 -x win_mainwnd_03.ui -o win_mainwnd_03e.py
chmod +x win_mainwnd_03e.py
При этом в коде отсутствует строка определения интерпретатора python.
Я ее добавляю либо руками либо командой
Код: (bash) [Выделить]
sed -i '1s/^/#!\/usr\/bin\/python3\n/' ./win_mainwnd_03e.py
Почему автоматически не вставляется строка вызова интепретатора?
Может я что то делаю не так?

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
Попробуй
Код: (python) [Выделить]
self.pushButton.clicked.connect(self.msgBtnPushed)
Прочитал тут - http://stackoverflow.com/questions/19966056/pyqt5-how-can-i-connect-a-qpushbutton-to-a-slot

Ну и читай документацию http://pyqt.sourceforge.net/Docs/PyQt4/qpushbutton.html#details
« Последнее редактирование: 31 Марта 2016, 18:16:06 от aSmile »

Axa-Ru

  • Автор темы
  • Гость
Спасибо. Это работает.
В данном случае используется прямой вызов при нажатии на кнопку.

Но я хочу чтоб генерилось событие и его ловил нужный обработчик (слот).
Этот механизм описан здесь:
http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html?highlight=connectslotsbyname
Но я никак не врубаюсь, как его задействовать.

ЗЫ. Или я не прав.... вроде как вызывается connect....
« Последнее редактирование: 31 Марта 2016, 18:27:25 от Axa-Ru »

serchik

  • Автор темы
  • Гость
Каждый виджет в конечном счете наследуется от QObject, который имеет метод connect

Пользователь решил продолжить мысль 31 Марта 2016, 18:32:09:
В Вашем случае self.pushButton.connect(...)

Axa-Ru

  • Автор темы
  • Гость
serchik,
спасибо.

 

Страница сгенерирована за 0.034 секунд. Запросов: 24.