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

如何让Python Tkinter中ScrolledText内容实现f-string变量替换?

实现用户输入邮件模板的变量替换

1. 初始化ScrolledText的模板内容

把st.insert(INSERT, "...")里的...替换成带占位符的邮件模板,占位符要和你的DataFrame列名完全匹配:

st.insert(INSERT, """Hi {First Name}

Please find the attached report for {Vendor}.

Thanks,
xxxxxx
xxxxxxxx
yuyyyyyyy
zzzzzz
""")

这里的{First Name}、{Vendor}对应DataFrame里的列名,和row['First Name']、row['Vendor']一一对应。

2. 修改邮件内容的替换逻辑

直接用st.get(1.0, END)拿到的是静态字符串,没法像f-string那样自动解析变量,我们可以用str.format_map()结合pandas Series的字典转换来实现替换:

把标记(1)的代码改成下面这样:

# 获取用户输入的模板,strip()去掉多余的首尾空白
email_template = st.get(1.0, END).strip()
# 将row转为字典,用format_map替换所有占位符
mail.Body = email_template.format_map(row.to_dict())

额外优化:处理模板错误

如果用户输入的模板里有拼写错误的占位符(比如写成{FirstNames}),可以加个异常捕获提示:

try:
    mail.Body = email_template.format_map(row.to_dict())
except KeyError as e:
    messagebox.showerror('模板错误', f'找不到变量: {e}')
    return

修改后的完整代码片段

st = ScrolledText(window)
# 设置初始邮件模板
st.insert(INSERT, """Hi {First Name}

Please find the attached report for {Vendor}.

Thanks,
xxxxxx
xxxxxxxx
yuyyyyyyy
zzzzzz
""")
st.grid(row=6, column=1, columnspan=2, pady=5, padx=20, ipadx=50)

def SendEmail():
    try:
        email_info = pd.read_excel(email_file_path)
        outlook = win32.Dispatch('outlook.application')
        # 获取用户输入的模板内容
        email_template = st.get(1.0, END).strip()
        for index, row in email_info.iterrows():
            mail = outlook.CreateItem(0)
            mail.To = row["Email"]
            mail.CC = row["CC"]
            mail.Subject = f"OOReport for: {row['Vendor']}"
            # 替换模板变量
            try:
                mail.Body = email_template.format_map(row.to_dict())
            except KeyError as e:
                messagebox.showerror('模板错误', f'模板中存在未定义的变量: {e}')
                return
            # 取消下面注释即可发送邮件
            # mail.Send()
    except Exception as e:
         messagebox.showerror('Python Error', str(e))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:05:26