2017-08-29 3 views
-1

J'utilise un QMessageBox pour dire à l'utilisateur si un champ qu'il a entré est incorrect ou manquant avant de soumettre le formulaire principal qui déclenche l'exécution. Actuellement, lorsque le QMessageBox apparaît, la fenêtre principale disparaît (je pensais qu'elle resterait derrière elle mais modale) et lorsque vous cliquez sur OK, l'application entière se ferme. J'ai regardé des exemples, mais je ne peux pas dire ce que je fais mal. Quelqu'un pourrait-il m'aider?Quelle est la meilleure façon d'utiliser un QMessageBox et de revenir au formulaire principal après avoir cliqué sur OK dans PyQt?

est ici ce morceau de code:

def isComplete(self): 
    complete = True 

    # check field 
    variable = self.dlg.ui.txtField.text() 

    if variable: 
    # got a non-empty string 
    else: 
    complete = False 
    msgBox = QtGui.QMessageBox() 
    msgBox.setText("Please fill in all required fields") 
    msgBox.exec_() 

    return complete 


def run(self): 
    # show dialog 
    self.dlg.show() 

    # run the dialog event loop 
    result = self.dlg.exec_() 

    # check necessary fields 
    complete = self.isComplete() 

    # see if OK was pressed and fields are complete 
    if (result and complete): 
    self.runCalcs() 
+1

Ce n'est pas un exemple entièrement runnable. Je ne peux même pas dire si le msgBox est un enfant de main ou non. – user1767754

Répondre

1

Dans les cas simples, vous pouvez utiliser des méthodes statiques information, question, warning et critical de QMessageBox. Il sera modal si parent arg est spécifié:

def isComplete(self): 
    complete = True 

    # check field 
    variable = self.dlg.ui.txtField.text() 

    if variable: 
    # got a non-empty string 
    else: 
    complete = False 
    QtGui.QMessageBox.warning(self, "Warning", "Please fill in all required fields") 

    return complete 


def run(self): 
    # show dialog 
    self.dlg.show() 

    # run the dialog event loop 
    result = self.dlg.exec_() 

    # check necessary fields 
    complete = self.isComplete() 

    # see if OK was pressed and fields are complete 
    if (result and complete): 
    self.runCalcs()