将日期输入显示从 m/d/yy 扩展到 mm/dd/yyyy?
Expanding dateentry display from m/d/yy to mm/dd/yyyy?
使用 tkcalendar python 模块中的 dateentry
,每次我 select 小部件上的日期都会将其缩短为 m/d/yy
格式。如果可能,我希望它扩展到 mm/dd/yyyy
,或者至少在这一年。
当使用 set_date 方法时,它会显示输入的任何内容(字符串),但一旦单击另一个日期就会恢复为缩短的格式。
有什么办法让它一直显示完整的日期吗?我似乎找不到允许我使用 %Y
的格式参数,所以这就是我问的原因。
如果您只想更改它在选择时的显示方式,您可以创建一个继承 DateEntry
并重写 _select
方法的 class。
from tkcalendar import DateEntry
import tkinter as tk
root = tk.Tk()
class CustomDateEntry(DateEntry):
def _select(self, event=None):
date = self._calendar.selection_get()
if date is not None:
self._set_text(date.strftime('%m/%d/%Y'))
self.event_generate('<<DateEntrySelected>>')
self._top_cal.withdraw()
if 'readonly' not in self.state():
self.focus_set()
entry = CustomDateEntry(root)
entry._set_text(entry._date.strftime('%m/%d/%Y'))
entry.pack()
root.mainloop()
从版本 1.5.0 开始,无需覆盖 _select
,使用 date_pattern
参数即可实现(参见 documentation):
import tkinter as tk
from tkcalendar import DateEntry
window = tk.Tk()
DateEntry(window, locale='en_US', date_pattern='mm/dd/y').pack() # custom formatting
DateEntry(window, locale='en_US').pack() # default formatting
window.mainloop()
给予
使用 tkcalendar python 模块中的 dateentry
,每次我 select 小部件上的日期都会将其缩短为 m/d/yy
格式。如果可能,我希望它扩展到 mm/dd/yyyy
,或者至少在这一年。
当使用 set_date 方法时,它会显示输入的任何内容(字符串),但一旦单击另一个日期就会恢复为缩短的格式。
有什么办法让它一直显示完整的日期吗?我似乎找不到允许我使用 %Y
的格式参数,所以这就是我问的原因。
如果您只想更改它在选择时的显示方式,您可以创建一个继承 DateEntry
并重写 _select
方法的 class。
from tkcalendar import DateEntry
import tkinter as tk
root = tk.Tk()
class CustomDateEntry(DateEntry):
def _select(self, event=None):
date = self._calendar.selection_get()
if date is not None:
self._set_text(date.strftime('%m/%d/%Y'))
self.event_generate('<<DateEntrySelected>>')
self._top_cal.withdraw()
if 'readonly' not in self.state():
self.focus_set()
entry = CustomDateEntry(root)
entry._set_text(entry._date.strftime('%m/%d/%Y'))
entry.pack()
root.mainloop()
从版本 1.5.0 开始,无需覆盖 _select
,使用 date_pattern
参数即可实现(参见 documentation):
import tkinter as tk
from tkcalendar import DateEntry
window = tk.Tk()
DateEntry(window, locale='en_US', date_pattern='mm/dd/y').pack() # custom formatting
DateEntry(window, locale='en_US').pack() # default formatting
window.mainloop()
给予