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