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