2017-10-03 7 views
1

J'ai rencontré un problème lors de la programmation de mon appli d'interface graphique dans PyQt5. J'essaie d'ouvrir ma seconde fenêtre (de dialogue) en cliquant sur "addclientbutton". Mais au lieu de cela, il ferme simplement la fenêtre principale. Ici, je l'ai créé:PyQt5. La fenêtre de dialogue ne s'affiche pas. Ferme la fenêtre principale à la place

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(281, 176) 
     self.comboBox = QtWidgets.QComboBox(Dialog) 
     self.comboBox.setGeometry(QtCore.QRect(90, 10, 71, 22)) 
     self.comboBox.setObjectName("comboBox") 
     self.comboBox.addItem("") 
     self.comboBox_2 = QtWidgets.QComboBox(Dialog) 
     self.comboBox_2.setGeometry(QtCore.QRect(10, 10, 71, 22)) 
     self.comboBox_2.setObjectName("comboBox_2") 
     self.comboBox_2.addItem("") 
     self.dateTimeEdit = QtWidgets.QDateTimeEdit(Dialog) 
     self.dateTimeEdit.setGeometry(QtCore.QRect(10, 60, 194, 22)) 
     self.dateTimeEdit.setObjectName("dateTimeEdit") 
     self.label_2 = QtWidgets.QLabel(Dialog) 
     self.label_2.setGeometry(QtCore.QRect(10, 40, 91, 16)) 
     self.label_2.setObjectName("label_2") 
     self.lineEdit = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit.setGeometry(QtCore.QRect(150, 110, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.label_3 = QtWidgets.QLabel(Dialog) 
     self.label_3.setGeometry(QtCore.QRect(150, 90, 121, 16)) 
     self.label_3.setObjectName("label_3") 
     self.lineEdit_2 = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit_2.setGeometry(QtCore.QRect(10, 110, 113, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     self.label_4 = QtWidgets.QLabel(Dialog) 
     self.label_4.setGeometry(QtCore.QRect(10, 90, 111, 16)) 
     self.label_4.setObjectName("label_4") 
     self.pushButton = QtWidgets.QPushButton(Dialog) 
     self.pushButton.setGeometry(QtCore.QRect(150, 140, 111, 23)) 
     self.pushButton.setObjectName("pushButton") 
     self.pushButton_2 = QtWidgets.QPushButton(Dialog) 
     self.pushButton_2.setGeometry(QtCore.QRect(10, 140, 111, 23)) 
     self.pushButton_2.setObjectName("pushButton_2") 

     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

Ici, je créé le bouton lui-même:

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(803, 803) 
     self.centralwidget = QtWidgets.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget) 
     self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 331, 191)) 
     self.calendarWidget.setObjectName("calendarWidget") 
     self.addclient = QtWidgets.QPushButton(self.centralwidget) 
     self.addclient.setGeometry(QtCore.QRect(0, 350, 331, 81)) 
     font = QtGui.QFont() 
     font.setFamily("Verdana") 
     font.setPointSize(10) 
     self.addclient.setFont(font) 
     self.addclient.setObjectName("addclient") 

Puis je l'ai écrit cette fonction:

import sys 
from interface import * 
from dialog import * 
from PyQt5 import QtCore, QtGui, QtWidgets 

class MyWin(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     QtWidgets.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     self.ui.addclient.clicked.connect(self.addclientfunction) 

    def addclientfunction(self): 
     self.Ui_Dialog.Dialog.show() 

if __name__=="__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    myapp = MyWin() 
    myapp.show() 
    sys.exit(app.exec_()) 

Donc, ici il est - désolé pour ce designer PyQt abus: D

Répondre

1

Vous avez juste besoin de créer une classe de dialogue de la même manière que vous avez fait pour la fenêtre principale. Donc, quelque chose comme cela devrait fonctionner:

class MyDialog(QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super(MyDialog, self).__init__(parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

class MyWin(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyWin, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.addclient.clicked.connect(self.addclientfunction) 

    def addclientfunction(self): 
     self.dialog = MyDialog() 
     self.dialog.show() 

Mais s'il vous plaît noter que les Ui_Dialog et Ui_MainWindow les classes indiquées dans votre question sont incomplètes. Ma réponse suppose que vos cours d'ui complets fonctionnent comme prévu.