Qdialog两次单击确定以返回主窗口

时间:2019-02-13 16:24:38

标签: python pyqt5 qdialog

我正在尝试设置一个程序,在该程序中,单击按钮后会弹出一个带有日期编辑框的窗口,以便可以将日期返回到主程序。我已经知道要返回的日期,但是它要求用户两次单击“确定”按钮。我找到了类似问题的其他答案,但它们似乎不适用于我的问题。 预先感谢。

from PyQt5 import QtCore, QtGui, QtWidgets

globalVar=None

class Ui_Dialog(QtWidgets.QDialog):
    def setupUi(self, Dialog,parent=None):
        super().__init__(parent)
        Dialog.setObjectName("Dialog")
        Dialog.resize(321, 201)
        font = QtGui.QFont()
        font.setPointSize(11)
        Dialog.setFont(font)
        self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 321, 231))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lblstartdate = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.lblstartdate.setObjectName("lblstartdate")
        self.verticalLayout.addWidget(self.lblstartdate)
        self.bxstart_date = QtWidgets.QDateEdit(self.verticalLayoutWidget)
        self.bxstart_date.setAlignment(QtCore.Qt.AlignCenter)
        self.bxstart_date.setDateTime(QtCore.QDateTime(QtCore.QDate(2019, 1, 1), QtCore.QTime(0, 0, 0)))
        self.bxstart_date.setObjectName("start_date")
        self.verticalLayout.addWidget(self.bxstart_date)
        self.lblenddate = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.lblenddate.setObjectName("lblenddate")
        self.verticalLayout.addWidget(self.lblenddate)
        self.bxend_date = QtWidgets.QDateEdit(self.verticalLayoutWidget)
        self.bxend_date.setAlignment(QtCore.Qt.AlignCenter)
        self.bxend_date.setDateTime(QtCore.QDateTime(QtCore.QDate(2019, 1, 1), QtCore.QTime(0, 0, 0)))
        self.bxend_date.setObjectName("end_date")
        self.verticalLayout.addWidget(self.bxend_date)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem)
        self.btnokcancel = QtWidgets.QDialogButtonBox(self.verticalLayoutWidget)
        self.btnokcancel.setOrientation(QtCore.Qt.Horizontal)
        self.btnokcancel.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.btnokcancel.setObjectName("btnokcancel")
        self.verticalLayout.addWidget(self.btnokcancel)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout.addItem(spacerItem1)

        self.retranslateUi(Dialog)
        self.btnokcancel.accepted.connect(Dialog.accept)
        self.btnokcancel.accepted.connect(self.ok)
        self.btnokcancel.rejected.connect(Dialog.reject)
        self.btnokcancel.rejected.connect(self.cancel)

    def ok(self):
        globalVar.vstart_date=self.bxstart_date.date()
        globalVar.vend_date=self.bxend_date.date()

        super().accept()


    def cancel(self):
        print("no")

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.lblstartdate.setText(_translate("Dialog", "Input start date in form MM/DD/YY"))
        self.bxstart_date.setDisplayFormat(_translate("Dialog", "MM/dd/yy"))
        self.lblenddate.setText(_translate("Dialog", "Input End date in form MM/DD/YY"))
        self.bxend_date.setDisplayFormat(_translate("Dialog", "MM/dd/yy"))

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(360, 285)
        MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777212))
        font = QtGui.QFont()
        font.setPointSize(11)
        MainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(29, 9, 311, 251))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.btn1 = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn1.setObjectName("btn1")
        self.verticalLayout.addWidget(self.btn1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.btn1.clicked.connect(self.open_dialog)

    def open_dialog(self):
        dialog = QtWidgets.QDialog()
        dialog.ui = Ui_Dialog()
        dialog.ui.setupUi(dialog)
        dialog.exec_()
        if dialog.exec_() == QtWidgets.QDialog.Accepted:
            print(globalVar.vstart_date)
            print(globalVar.vend_date)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Color Lab Scripts"))
        self.btn1.setText(_translate("MainWindow", "open dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    globalVar = Ui_MainWindow()
    globalVar.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

0 个答案:

没有答案