2017-08-04 2 views
2

Dans mon application principale ouvrir un QDialog, et de ce QDialog je veux ouvrir/montrer les uns les autres. Au lieu de montrer cette deuxième boîte de dialogue avec l'accent sur elle, il apparaît derrière mon application principale et est bloqué/désactivé et je ne peux pas ne pas travailler avec elle. Chaque forme est dans un fichier séparé:A QDialog d'un autre QDialog ne figure pas

Dans le mainform.py:

form_gui = uic.loadUiType("mainform.ui")[0] # Load the UI 
class MainForm(QtGui.QMainWindow, form_gui): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.btnOpenForm1.clicked.connect(self.showFirstDialog) 
    ... 
    def showFirstDialog(self): 
     browser1 = UI_Form1(self) 
     browser1.setWindowTitle('UI_Form1') 
     browser1.show() 
    ... 
if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = MVSGUI() 
    myapp.show() 
    sys.exit(app.exec_()) 

dans le fichier UI_Form1.py:

form_gui = uic.loadUiType("uiform1.ui")[0] # Load the UI 
class UI_Form1(QtGui.QDialog, form_gui): 
    def __init__(self, parent): 
     super(UI_Form1, self).__init__(parent) 
     self.btnOpenForm2.clicked.connect(self.showSecondDialog) 
    ... 
    def showSecondDialog(self): 
     browser2 = UI_Form2(self) 
     browser2.setWindowTitle('UI_Form2') 
     browser2.show() 
    ... 

dans le fichier UI_Form2.py:

form_gui = uic.loadUiType("uiform2.ui")[0] # Load the UI 
class UI_Form2(QtGui.QDialog, form_gui): 
    def __init__(self, parent): 
     super(UI_Form2, self).__init__(parent) 
    ... 

Il peut être facile de deviner ce qui ne va pas, mais je ne trouve pas comment résoudre ce problème.

+0

Il est difficile de reproduire avec votre code. Pourriez-vous nous donner le script minimal pour faire simplement 'python script.py' et voir votre problème? –

+0

assurez-vous que les deux boîtes de dialogue ne sont pas modales – Mailerdaimon

+0

@ Tiger-222 J'ai édité le code montrant la déclaration des boutons-poussoirs. Ainsi, mainform.py crée l'interface graphique principale. Il contient un bouton qui ouvre la première boîte de dialogue. Cette première boîte de dialogue se trouve dans le fichier UI_Form1.py, elle contient un bouton qui ouvre la deuxième boîte de dialogue. Ainsi, cette deuxième boîte de dialogue devrait apparaître devant la première boîte de dialogue, mais à la place elle s'ouvre désactivée derrière les fenêtres principales. Espérons que cela aide –

Répondre

2

QDialogs peuvent être créés dans Modal et le mode Modeless. Assurez-vous de les rendre modèles si vous voulez en utiliser plusieurs en même temps.

Vous pouvez jeter un oeil à la documentation de QDialog pour voir comment vous pouvez changer le mode modal. Vous pouvez également modifier le comportement de la fenêtre modale en utilisant le modality enum.

Assurez-vous également d'utiliser le bon outil pour la bonne tâche, les documentation états:

Une fenêtre de dialogue est une fenêtre de niveau supérieur principalement utilisé pour des tâches à court terme et de brèves communications avec l'utilisateur .