【问题标题】:How to add Today Button in QDateEdit Pop-up QCalendarWidget如何在 QDateEdit 弹出 QCalendarWidget 中添加今天按钮
【发布时间】:2020-03-16 11:17:55
【问题描述】:

今天这样的按钮

我的弹出式日历小部件的图像:

我正在尝试使用 Python 中的 PyQt5 和日期选择器选项创建简单的 Gui。我需要在弹出的 QCalendarWidget 中的 QDateEdit 中添加今天按钮。

【问题讨论】:

  • 您能否更好地解释一下该按钮应该在哪里以及按下该按钮时应该做什么?
  • 我想将按钮放在弹出日历中。当我按下按钮时,日历应该滚动到当前日期。
  • 在弹出窗口的哪一部分?你能放一张你想要得到的图片吗?
  • 谢谢 eyllanesc。我已经在我的帖子中添加了示例图片,请检查它。

标签: python pyqt pyqt5 qcalendarwidget


【解决方案1】:

您必须通过布局将按钮添加到QCalendarWidget,并且在按下按钮时将QDate::currentDate()设置为QCalendarWidget的selectedDate:

import sys

from PyQt5 import QtCore, QtWidgets


class DateEdit(QtWidgets.QDateEdit):
    def __init__(self, parent=None):
        super().__init__(parent, calendarPopup=True)
        self._today_button = QtWidgets.QPushButton(self.tr("Today"))
        self._today_button.clicked.connect(self._update_today)
        self.calendarWidget().layout().addWidget(self._today_button)

    @QtCore.pyqtSlot()
    def _update_today(self):
        self._today_button.clearFocus()
        today = QtCore.QDate.currentDate()
        self.calendarWidget().setSelectedDate(today)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = DateEdit()
    w.show()
    sys.exit(app.exec_())

【讨论】:

    【解决方案2】:

    您甚至可以决定创建一个自定义按钮来处理弹出窗口。

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    
    
    class EditDate:
    
        def __init__(self):
            super(EditDate, self).__init__()
            self.app_runner()
    
        def date_gui(self):
            self.app = QApplication(sys.argv)
            self.win = QDialog()
            self.win.setFixedSize(280, 40)
    
    
            self.dateEdit = QDateEdit(self.win)
            self.dateEdit.setFixedSize(230, 40)
            self.dateEdit.move(5, 0)
    
            self.hideCalendar = QPushButton(self.win)
            self.hideCalendar.setText("Hide")
            self.hideCalendar.move(231, 0)
            self.hideCalendar.setFixedSize(45, 40)
    
            self.displayCalendar = QPushButton(self.win)
            self.displayCalendar.setText("Date..")
            self.displayCalendar.move(231, 0)
            self.displayCalendar.setFixedSize(45, 40)
    
            self.calender = QCalendarWidget(self.win)
            self.calender.move(5, 40)
    
            self.todayButton = QPushButton(self.win)
            self.todayButton.setText("Today")
            self.todayButton.setFixedSize(100, 30)
            self.todayButton.move(5, 200)
    
            self.calender.hide()
            self.todayButton.hide()
    
        def button_handling(self):
            self.todayButton.clicked.connect(self.todays_date)
            self.displayCalendar.clicked.connect(self.display_cal)
            self.hideCalendar.clicked.connect(self.hide_cal)
    
        def hide_cal(self):
            self.calender.hide()
            self.displayCalendar.show()
            self.todayButton.hide()
            self.hideCalendar.hide()
            self.win.setFixedSize(280, 40)
    
        def display_cal(self):
            self.win.setFixedSize(280, 300)
            self.calender.show()
            self.todayButton.show()
            self.hideCalendar.show()
            self.displayCalendar.hide()
    
        def todays_date(self):
            self.date = QDate.currentDate()
            self.dateEdit.setDate(self.date)
            self.calender.setSelectedDate(self.date)
    
        def app_runner(self):
            self.date_gui()
            self.win.show()
            self.button_handling()
            sys.exit(self.app.exec_())
    
    main = EditDate()
    

    【讨论】:

    • 您的解决方案对我来说很好,但我建议您避免固定位置并更喜欢布局,因为小部件在其他人的系统中可能有不同的大小提示和边距,导致严重的displaying issues
    • 谢谢兄弟。非常感谢您的观察!
    猜你喜欢
    • 2021-06-07
    • 2019-03-03
    • 1970-01-01
    • 2014-07-19
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多