Полное имя месяца в образце 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))