2015-06-25 3 views
1

Я создал объект QWizard, который содержит несколько страниц, я попытался открыть файл, когда было нажата NextButton конкретной страницы. Сначала я попробовал QWizard.NextButton.clicked.connect(), пришел с: «AttributeError: объект„WizardButton“не имеет атрибута„щелкнул“»pyqt: как исправить сигнал при нажатии NextButton из QwizardPage

После этого я искал. „WizardButton“ в Qt Assistant, не может получить какие-либо полезные сигналы излучать, можно ли осуществить это как QPushButton.clicked.connect()

вот конкретная страница:

class AccountPage(QWizardPage): 

    def __init__(self, parent=None): 
     super(AccountPage, self).__init__(parent) 

     self.setTitle("Account Information") 

     NameLabel = QLabel("&Name:") 
     NameLineEdit = QLineEdit() 
     NameLabel.setBuddy(NameLineEdit) 

     EmailLabel = QLabel("&Email Address:") 
     EmailLineEdit = QLineEdit() 
     EmailLabel.setBuddy(EmailLineEdit) 

     PwdLabel = QLabel("&Password:") 
     PwdLineEdit = QLineEdit() 
     PwdLabel.setBuddy(PwdLineEdit) 

     self.registerField('Name*', NameLineEdit) 
     self.registerField('EmailAddress*', EmailLineEdit) 
     self.registerField('Password*', PwdLineEdit) 

     layout = QGridLayout() 
     layout.addWidget(NameLabel, 0, 0) 
     layout.addWidget(NameLineEdit, 0, 1) 
     layout.addWidget(EmailLabel, 1, 0) 
     layout.addWidget(EmailLineEdit, 1, 1) 
     layout.addWidget(PwdLabel, 2, 0) 
     layout.addWidget(PwdLineEdit, 2, 1) 

     self.setLayout(layout) 

     QWizard.NextButton.clicked.connect(self.setMB) 

    def setMB(self): 
     try: 
      with open('mb.ini', 'w') as actInfo: 
       actInfo.write('sj') 

     except IOError as err: 
      print('mb.ini error:' + str(err)) 
+0

Можете ли вы предоставить некоторый код (см [MCVE] (http://stackoverflow.com/help/ mcve))? – Mel

+0

@tmoreau извините, что код добавлен now – Cesc

+0

Если 'setMB' должен вызывать, когда вы нажимаете« next », почему бы не вызвать его на следующей странице' __init__' метод? – Mel

ответ

1
import sys 
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 

class Window(QWizard): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.accoutPage = AccountPage() 
     self.secondPage = Page2() 
     self.thirdPage = Page3() 
     self.addPage(self.accoutPage) 
     self.addPage(self.secondPage) 
     self.addPage(self.thirdPage) 
     self.button(QWizard.NextButton).clicked.connect(self.accoutPage.setMB) 


class AccountPage(QWizardPage): 
    def __init__(self, parent=None): 
     super(AccountPage, self).__init__(parent) 

     self.setTitle("Account Information") 

     self.NameLabel = QLabel("&Name:") 
     self.NameLineEdit = QLineEdit() 
     self.NameLabel.setBuddy(self.NameLineEdit) 

     self.EmailLabel = QLabel("&Email Address:") 
     self.EmailLineEdit = QLineEdit() 
     self.EmailLabel.setBuddy(self.EmailLineEdit) 

     self.PwdLabel = QLabel("&Password:") 
     self.PwdLineEdit = QLineEdit() 
     self.PwdLabel.setBuddy(self.PwdLineEdit) 

     self.registerField('Name*', self.NameLineEdit) 
     self.registerField('EmailAddress*', self.EmailLineEdit) 
     self.registerField('Password*', self.PwdLineEdit) 


     layout = QGridLayout() 
     layout.addWidget(self.NameLabel, 0, 0) 
     layout.addWidget(self.NameLineEdit, 0, 1) 
     layout.addWidget(self.EmailLabel, 1, 0) 
     layout.addWidget(self.EmailLineEdit, 1, 1) 
     layout.addWidget(self.PwdLabel, 2, 0) 
     layout.addWidget(self.PwdLineEdit, 2, 1) 

     self.setLayout(layout) 
     self.i = 0 #if you need to call it once 

    def setMB(self): 
     if self.i == 0: 
      print(self.PwdLineEdit.text(), self.i) 
      try: 
       with open('mb.ini', 'w') as actInfo: 
        actInfo.write('sj') 

      except IOError as err: 
       print('mb.ini error:' + str(err)) 
      finally: 
       self.i += 1 


class Page2(QWizardPage): 
    def __init__(self): 
     super(Page2, self).__init__() 

class Page3(QWizardPage): 
    def __init__(self): 
     super(Page3, self).__init__() 

def main(): 
    app = QApplication(sys.argv) 
    app.setStyle('plastique') 

    window = Window() 
    window.setWizardStyle(1) 
    window.show() 
    app.exec_() 

if __name__ == "__main__": 
    sys.exit(main()) 
+0

Не назовешь ли 'setMB' каждый раз, когда нажимается« NextButton »? – Mel

+0

Да. Если вам нужно сделать это всего за один раз, вы можете определить переменную в вашем аккаунте AccountPage(). Я редактировал код. – Safoyeth

+0

THX! Но почему 'NextButton' можно щелкнуть в классе' Qwizard', а не 'QWizardPage'? – Cesc

Смежные вопросы