You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ttkbootstrap的DateEntry组件状态恢复为正常?

解决ttkbootstrap DateEntry启用时的TclError问题

问题原因

ttkbootstrap的DateEntry组件仅支持两种状态值:"disabled"(禁用)和"readonly"(只读,允许点击日历选择日期),不支持"normal"状态,这就是调用calend["state"]="normal"时触发错误的核心原因。

解决方案

根据需求选择以下两种处理方式:

方式1:恢复为只读状态(仅允许日历选择)

修改启用函数,将状态设置为"readonly"即可:

def enable_calendar():
    calend["state"] = "readonly"

方式2:允许手动输入+日历选择

如果需要让用户既可以手动输入日期,又能点击日历选择,需要直接操作DateEntry内部的输入框和日历按钮:

def enable_calendar():
    # 启用内部输入框,允许手动输入
    calend.entry.config(state="normal")
    # 启用日历触发按钮
    calend.button.config(state="normal")

禁用函数可以保持原有写法,也可以对应地分别禁用内部组件:

def disable_calendar():
    calend["state"] = "disabled"
    # 或者拆分操作内部组件
    # calend.entry.config(state="disabled")
    # calend.button.config(state="disabled")

修正后的完整代码

import tkinter as tk 
import ttkbootstrap as ttk

def disable_calendar():
    calend["state"] = "disabled"

def enable_calendar():
    # 根据需求选择其中一种启用方式
    # 方式1:只读状态(仅允许日历选择)
    calend["state"] = "readonly"
    # 方式2:允许手动输入+日历选择
    # calend.entry.config(state="normal")
    # calend.button.config(state="normal")

root = ttk.Window() 
root.geometry("400x400")

calend = ttk.DateEntry(bootstyle="primary") 
calend.place(x=10, y=10)     

disableCalendar_button = ttk.Button(text="Disable", width=10, command=disable_calendar) 
disableCalendar_button.place(x=10, y=50)

enableCalendar_button = ttk.Button(text="Enable", width=10, command=enable_calendar) 
enableCalendar_button.place(x=100, y=50)

root.mainloop()

内容的提问来源于stack exchange,提问作者Panama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:05:15