Полное имя месяца в образце QCalendar

Мне нужен виджет календаря для приложения, которое я пишу в 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()

и в результате должно быть примерно так, как это рисует, как говорит разработчик:

но когда я запускаю этот код в моей системе, я получаю все записи, кроме формата месяца, как я могу иметь полное имя месяца, например, май, июнь... а не M01,M02,... это результат, который я получаю при запуске код в моей системе:

1 ответ

Решение

Как указывают документы:

QString QDate:: toString (Qt:: DateFormat format = Qt:: TextDate

Это перегруженная функция.

Возвращает дату в виде строки. Параметр format определяет формат строки.

Если формат Qt:: TextDate, строка форматируется способом по умолчанию. QDate::shortDayName() и QDate::shortMonthName() используются для генерации строки, поэтому имена дня и месяца будут локализованными именами с использованием системного языкового стандарта, то есть QLocale:: system (). Примером такого форматирования является "Сб 20 мая 1995".

Если формат Qt::ISODate, строковый формат соответствует расширенной спецификации ISO 860 1 для представления даты и времени в форме yyyy-MM-dd, где yyyy - год, MM - месяц года (между 0 1 и 12), а дд - день месяца между 0 1 и 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. Примером такого форматирования является "20 мая 1995".

Если дата недействительна, будет возвращена пустая строка.

Предупреждение. Формат Qt:: ISODate действителен только в течение лет в диапазоне от 0 до 9999. Это ограничение может также применяться к форматам с поддержкой локали, в зависимости от настроек локали.

(акцент мой)

Как уже отмечалось, форматы зависят от QLocale, в вашем случае вы, вероятно, имеете QLocale, отличный от разработчика, поэтому есть 2 решения:

  • Установите QLocale в приложении:

    app = QApplication(sys.argv)
    QLocale.setDefault(QLocale(QLocale.English)) # <---
    # ...
    
  • Установите QLocale в QCalendarWidget:

    my_calendar.setLocale(QLocale(QLocale.English))
    
Другие вопросы по тегам