PyQt使用多个类分配按钮命令

时间:2011-10-24 03:51:29

标签: python qt pyqt

我是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类中保留button action命令。有没有办法做到这一点?
我最终将有几个类使用QtCore.QObject.connect选项为按钮分配操作。我只是在第一个工作而不必将其添加到main()类时遇到问题。

1 个答案:

答案 0 :(得分:0)

按钮不起作用的原因是因为Ui_Customer已成为main的子类(为什么?)而未正确初始化。如果基类更改为object,则信号处理程序将起作用 - 尽管由于dict查找中的拼写错误而会生成AttributeError(我认为您的意思是'text_%d')。 / p>

我不会评论您的代码中的任何个别问题,而是提供一条通用建议:使用Qt Designer创建UI并将所有程序逻辑保存在单独的模块中。它将使学习PyQt变得更加容易,并且是养成未来的好习惯。