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

Python Tkinter Text组件展示随机日期出现多余{}如何解决

问题根因

你构造answer和msg2变量时使用逗号分隔多个值,Python会将逗号分隔的内容识别为元组,而非拼接后的完整字符串。Tkinter的Text组件插入元组类型数据时,会对嵌套结构、非字符串元素自动用大括号包裹,这就是多余{}的来源。
此外你的代码还有一个隐藏bug:monthd = random.randrange(1, 12)的取值范围是左闭右开,永远取不到12,不会生成12月的日期。

修复方案

将字符串拼接逻辑改为字符串格式化即可,推荐用f-string写法,还可以省略12个月份的if判断:

import random
from datetime import datetime

# 原有Text组件初始化代码保持不变
self.text_widget = Text(self.ui, width=20, height=2, bg="#f1f1f1", fg="#656565",
                            font=Font1, padx=5, pady=5)
self.text_widget.place(relheight=0.845, relwidth=1, rely=0.08)
self.text_widget.configure(cursor="arrow", state=DISABLED)

# 随机日期生成逻辑优化
year = random.randrange(2021, 2121)
monthd = random.randrange(1, 13) # 修改取值上限为13,支持取到12月
# 直接通过datetime转换得到月份名,无需手写if判断
month = datetime(2023, monthd, 1).strftime('%B')
date = random.randrange(1, 29)

# 用f-string拼接得到完整字符串,而非元组
answer = f"on {date}, {month} {year}"
msg2 = f"Bot:   {answer}\n\n\n"

# 原有显示逻辑保持不变
self.text_widget.configure(state=NORMAL)
self.text_widget.insert(END, msg2)
self.text_widget.configure(state=DISABLED)
print("[OK] Self Message Displayed\n")
self.text_widget.see(END)

如果你不想用f-string,也可以把原有拼接的逗号替换为加号,注意要把数字类型的date和year转成字符串:

# 替代拼接写法
answer = "on " + str(date) + ", " + month + " " + str(year)
msg2 = "Bot:   " + answer +  "\n\n\n"

内容的提问来源于stack exchange,提问作者Terry-065

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:57:00