PyQT5 всплывающее окно-календарь
Кратко: нажимаешь кнопку - всплывает окно с выбором даты в календаре.
Подробно: у меня есть текстбокс и кнопка, нужно, чтобы при нажатии на кнопку вылазил календарь под этими элементами в виде всплывающего окна. А после нажатия на дату в календаре она переносится в текстбокс.
Условный пример и его код ниже:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.lineEdit = QtWidgets.QLineEdit(Dialog)
self.lineEdit.setGeometry(QtCore.QRect(47, 32, 133, 20))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(11, 31, 30, 16))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(186, 31, 21, 23))
self.pushButton.setObjectName("pushButton")
self.calendarWidget = QtWidgets.QCalendarWidget(Dialog)
self.calendarWidget.setGeometry(QtCore.QRect(10, 60, 312, 183))
self.calendarWidget.setObjectName("calendarWidget")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Дата:"))
self.pushButton.setText(_translate("Dialog", "V"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Диалоговое окно не интересует.
Заранее спасибо!
Ответы (2 шт):
Класс
QDateTimeEditпредоставляет виджет для редактирования даты и времени.
calendarPopup : boolЭто свойство содержит текущий режим отображения всплывающего календаря. При нажатии на кнопку со стрелкой отобразится всплывающее окно с календарем. Это свойство действительно только в том случае, если существует допустимый формат отображения даты.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.lineEdit = QtWidgets.QLineEdit(Dialog)
self.lineEdit.setGeometry(QtCore.QRect(47, 32, 133, 20))
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(11, 31, 30, 16))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(186, 31, 21, 23))
self.pushButton.setObjectName("pushButton")
self.calendarWidget = QtWidgets.QCalendarWidget(Dialog)
self.calendarWidget.setGeometry(QtCore.QRect(10, 60, 312, 183))
self.calendarWidget.setObjectName("calendarWidget")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Дата:"))
self.pushButton.setText(_translate("Dialog", "V"))
class Window(QtWidgets.QDialog, Ui_Dialog):
def __init__(self):
super().__init__()
self.setupUi(self)
self.dateEdit = QtWidgets.QDateEdit(self)
font = QtGui.QFont()
font.setPointSize(12)
self.dateEdit.setFont(font)
self.dateEdit.setCalendarPopup(True) # +++
self.dateEdit.setTimeSpec(QtCore.Qt.LocalTime)
self.dateEdit.setGeometry(QtCore.QRect(220, 31, 133, 20))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = Window() #QtWidgets.QDialog()
# ui = Ui_Dialog()
# ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
S.Nick, спасибо!
Благодаря твоему предложению в QT Designer нашёл виджет DateEdit, где как раз-таки есть этот calendarPopup.
А если нужно поставить текущую дату при каждом запуске программы,то нужно прописать:
self.dateEdit.setDate(QtCore.QDate.currentDate())
Пример:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(131, 42)
self.dateEdit = QtWidgets.QDateEdit(Dialog)
self.dateEdit.setGeometry(QtCore.QRect(10, 10, 110, 22))
self.dateEdit.setCalendarPopup(True)
self.dateEdit.setDate(QtCore.QDate.currentDate())
self.dateEdit.setObjectName("dateEdit")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

