2011-10-24 10 views
0

私はPythonとPyQtの新機能です。私は複数のクラスを持っているときにいくつかのボタンアクションを動作させるのに問題があります。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_()) 

問題は、私は「リセット」ボタン(pushbutton_2)何も押さない場合に発生するということです(私ものpython内のエラーのいずれかの種類を得ることはありません):たとえば、私のコードでは、私は次のことを持っています。私は、私のコードからコメントのセクションを削除すると、それを動作させることができます。私の唯一の問題は、Ui_Customerクラスにボタンアクションコマンドを残したいということでした。これを行う方法はありますか?
QtCore.QObject.connectオプションを使用してボタンにアクションを割り当てるいくつかのクラスを最終的に作成します。 main()クラスに追加することなく最初のものを動作させるのに問題があります。

+0

質問とは無関係: 'QObject.connect' +' QtCore.SIGNAL'を絶対に使用しないでください。 'my_button.clicked.connect(some_function)'を使う – JBernardo

答えて

0

Ui_Customermainのサブクラスになっており、正しく初期化されていないため、ボタンが機能しないのはなぜですか。基本クラスがobjectに変更された場合、シグナルハンドラは機能しますが、これはdict参照の入力ミスのためにAttributeErrorを生成します(私はあなたが'text_%d'を意味すると思う)。

コードの個々の問題にコメントするのではなく、Qt Designerを使用してUIを作成し、すべてのプログラムロジックを別々のモジュールに保存してください。それはPyQtの学習をはるかに簡単にし、未来に向かう良い習慣です。

関連する問題