0

I'm trying to setup a program where after clicking a button a window pops up with date edit boxes so the date can be returned to the main program. I've gotten the date to be returned but it requires the user to click the ok button twice. I found other answers for similar questions but they did not seem to be applicable to my problem. Thanks in advance.

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_())
Matthew
  • 393
  • 2
  • 4
  • 15

0 Answers0