QCalendar示例中的全名月份格式

时间:2019-07-16 05:36:26

标签: python pyqt pyqt5 qdate qcalendarwidget

我需要在PyQt5中编写的应用程序的日历小部件,发现以下示例源代码:

import sys
from PyQt5 import *
from PyQt5.QtWidgets import QApplication, QCalendarWidget, QWidget, QLabel
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()
      self.initUI()
   def initUI(self):
      my_calendar = QCalendarWidget(self)
      my_calendar.setGridVisible(True)
      my_calendar.move(10, 20)
      my_calendar.clicked[QDate].connect(self.show_date)
      self.my_label = QLabel(self)
      date = my_calendar.selectedDate()
      self.my_label.setText(date.toString())
      self.my_label.move(10, 220)
      self.setGeometry(100,100,600,270)
      self.setWindowTitle('Calendar')
      self.show()
   def show_date(self, date):
      self.my_label.setText(date.toString())

def main():
   app = QApplication(sys.argv)
   ex = Example()
   sys.exit(app.exec_())
if __name__ == '__main__':
   main()

,结果应类似于开发人员所说的这张图片:

the month format is full name

但是当我在系统中运行此代码时,我得到的所有内容都可以写成月份以外的格式,我怎么能有全名月份格式,例如May,June,...而不是M01,M02,... 这是我在系统中运行代码时得到的结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

docs指出:

  

QString QDate :: toString(Qt :: DateFormat格式= Qt :: TextDate

     

这是一个重载函数。

     

以字符串形式返回日期。 format参数确定   字符串的格式。

     

如果格式为Qt :: TextDate,则将字符串设置为默认格式   办法。 QDate :: shortDayName()和QDate :: shortMonthName()用于   生成字符串,,以便将日期和月份名称本地化   使用系统区域设置命名,即QLocale :: system()。一个例子   这种格式是“ 1995年5月20日星期六”。

     

如果格式为Qt :: ISODate,则字符串格式对应于ISO   8601扩展了日期和时间表示的规范,   格式为yyyy-MM-dd,其中yyyy是年份,MM是月份   年份(介于01和12之间),而dd是介于   01和31。

     

如果格式为Qt :: SystemLocaleShortDate或   Qt :: SystemLocaleLongDate,字符串格式取决于语言环境   系统设置。与通话相同   QLocale :: system()。toString(date,QLocale :: ShortFormat)或   QLocale :: system()。toString(date,QLocale :: LongFormat)。

     

如果格式为Qt :: DefaultLocaleShortDate或   Qt :: DefaultLocaleLongDate,字符串格式取决于默认值   应用程序语言环境。这是用QLocale :: setDefault()设置的语言环境,   或系统语言环境(如果未设置默认语言环境)。相同   调用QLocale()。toString(date,QLocale :: ShortFormat)或   QLocale()。toString(date,QLocale :: LongFormat)。

     

如果格式为Qt :: RFC2822Date,则字符串以RFC格式设置   2822兼容方式。这种格式的一个示例是“ 1995年5月20日”。

     

如果日期无效,将返回一个空字符串。

     

警告:Qt :: ISODate格式仅对0范围内的年份有效。   到9999。此限制也可能适用于支持区域设置的格式,   取决于语言环境设置。

(重点是我的)

如前所述,格式取决于QLocale,在您的情况下,您的QLocale可能与开发人员不同,因此有两种解决方案:

  • 在应用程序中设置QLocale:

    app = QApplication(sys.argv)
    QLocale.setDefault(QLocale(QLocale.English)) # <---
    # ...
    
  • 在QCalendarWidget中设置QLocale:

    my_calendar.setLocale(QLocale(QLocale.English))