Python PyQt5。对话框窗口不显示';我没有出现。而是关闭主窗口

Python PyQt5。对话框窗口不显示';我没有出现。而是关闭主窗口,python,pyqt,pyqt5,qmainwindow,qdialog,Python,Pyqt,Pyqt5,Qmainwindow,Qdialog,在PyQt5中编程gui应用程序时,我遇到了一个问题。我试图通过单击“addclientbutton”打开第二个(对话框)窗口。但它只是关闭主窗口。我在这里创建了它: class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(281, 176) self.comboBox = QtWidgets.QComb

在PyQt5中编程gui应用程序时,我遇到了一个问题。我试图通过单击“addclientbutton”打开第二个(对话框)窗口。但它只是关闭主窗口。我在这里创建了它:

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)
我在这里创建了按钮本身:

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")
然后我写了这个函数:

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_())

因此,这里对PyQt设计器的滥用表示抱歉:D

您只需要以与主窗口相同的方式创建一个对话框类。因此,类似这样的方法应该有效:

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()
但请注意,问题中显示的
Ui\u对话框
Ui\u主窗口
类不完整。我的回答假设您的整个ui类按预期工作