PyQt - Как подключить вход в пользовательский слот / функцию

Я новичок в программировании PyQt. Я пытаюсь создать простое приложение, но ударил при подключении сигнала к пользовательской функции. Каждый раз, когда я запускаю, я получаю одну и ту же ошибку "AttributeError: объект AppGui" не имеет атрибута "chk_fun" ". Вот простой пример кнопки. Все, что я хотел, - это напечатать некоторый текст в терминале при нажатии кнопки. Я использовал Qt Designer для создания диалога и преобразовал его в.py, используя pyuic4. Вот код, сгенерированный из pyuic4 "ui_test.py"

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

# Form implementation generated from reading ui file 'test.ui'
#
# Created: Wed May 22 20:18:43 2013
#      by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 300)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(110, 70, 161, 91))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.pushButton.setText(_translate("Dialog", "PushButton", None))

и вот фактическое содержание main.py.

#!/usr/bin/env python

import sys

from PyQt4 import QtCore, QtGui
from ui_test import Ui_Dialog

class AppGui(QtGui.QDialog,Ui_Dialog):

    def __init__(self):
        QtGui.QDialog.__init__(self)

        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

    self.ui.pushButton.clicked.connect(self.chk_fun)

    def chk_fun(self):
        print("Good.") 

app = QtGui.QApplication(sys.argv)
window = AppGui()
ui = Ui_Dialog()
window.show()
sys.exit(app.exec_())

Где я ошибаюсь?

1 ответ

Решение

Отступ неверен. Линия с вызовом connect должен быть с отступом как __init__ тело метода.

class AppGui(QtGui.QDialog,Ui_Dialog):

    def __init__(self):
        QtGui.QDialog.__init__(self)

        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(self.chk_fun)
Другие вопросы по тегам