PyQt назначает команды кнопок, используя несколько классов - PullRequest
0 голосов
/ 24 октября 2011

Я новичок в Python, а также в PyQt. У меня возникают проблемы с выполнением некоторых действий кнопок, когда у меня несколько классов. Например, в моем коде у меня есть следующее:

class main(QDialog):
    def __init__(self, parent=None, *args):
        QDialog.__init__(self, parent, *args)
        self.setupUi(self)

    def setupUi(self, Dialog):
        Dialog.resize(610, 570)
        Dialog.setWindowTitle(QtGui.QApplication.translate("testing", 
             "testing", None, QtGui.QApplication.UnicodeUTF8))

        self.stackedWidget = QtGui.QStackedWidget(Dialog)
        self.stackedWidget.setGeometry(QtCore.QRect(0, 120, 711, 450))

        for i in range(1, 3):
            self.__dict__['page%d' % i] = QtGui.QWidget()  
            self.stackedWidget.addWidget(self.__dict__['page%d' % i] )  

        self.Ui_Customer = Ui_Customer(Dialog, self.page1)
#        QtCore.QObject.connect(self.Ui_Customer.pushButton_2, 
#            QtCore.SIGNAL("clicked()"), self.clearalltextboxes)

#        def clearalltextboxes(self):
#            for i in range(1, 13):
#                self.Ui_Customer.__dict__['textEdit_%d' % i].clear()

        self.stackedWidget.setCurrentIndex(0)

class Ui_Customer(main):
    def __init__(self, Dialog, page):
        for i in range(1, 3):
            self.__dict__['text_%d' % i] = QtGui.QTextEdit(page)

        self.text_1.setGeometry(QtCore.QRect(10, 10, 81, 21))
        self.text_2.setGeometry(QtCore.QRect(240, 10, 81, 21))

        self.pushButton_2 = QtGui.QPushButton(page)
        self.pushButton_2.setGeometry(QtCore.QRect(130, 160, 101, 23))
        self.pushButton_2.setText("Reset")
        QtCore.QObject.connect(self.pushButton_2, 
            QtCore.SIGNAL("clicked()"), self.clearalltextboxes)

    def clearalltextboxes(self):
        for i in range(1, 3):
            self.Ui_Customer.__dict__['textEdit_%d' % i].clear()


if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = main() 
    myapp.show() 
    sys.exit(app.exec_()) 

Проблема в том, что когда я нажимаю кнопку сброса (кнопка_2), ничего не происходит (я даже не получаю никакой ошибки в Python). Я могу заставить его работать, если я удалю закомментированные разделы из моего кода. Моя единственная проблема в том, что я хотел сохранить команду действия кнопки в классе Ui_Customer. Есть ли способ сделать это?
Со временем у меня будет несколько классов, которые используют опцию QtCore.QObject.connect для назначения действия кнопке. У меня просто проблемы с тем, чтобы заставить работать первый, не добавляя его в класс main ().

1 Ответ

0 голосов
/ 24 октября 2011

Причина, по которой кнопка не работает, заключается в том, что Ui_Customer был сделан подклассом main (почему?) И не инициализирован должным образом. Если базовый класс изменить на object, обработчик сигнала будет работать - хотя он сгенерирует AttributeError из-за опечатки в поиске dict (думаю, вы имели в виду 'text_%d').

Вместо того чтобы комментировать какие-либо отдельные проблемы с вашим кодом, я просто дам один общий совет: создайте свой пользовательский интерфейс с помощью Qt Designer и храните всю логику вашей программы в отдельных модулях. Это значительно облегчит изучение PyQt и станет хорошей привычкой на будущее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...