我需要在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()
,结果应类似于开发人员所说的这张图片:
但是当我在系统中运行此代码时,我得到的所有内容都可以写成月份以外的格式,我怎么能有全名月份格式,例如May,June,...而不是M01,M02,... 这是我在系统中运行代码时得到的结果:
答案 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))