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

Python Tkinter如何动态将Toplevel窗口标题设为传入字典的名称

解决方案

你当前的写法是将字典解包为**kwargs传入函数,解包后仅保留键值对信息,会丢失原字典的变量名标识,因此无法直接从kwargs中获取字典名。你可以选择以下两种方案实现需求:

方案1:调整传参逻辑(推荐,稳定性高)

修改escrito函数参数,改为接收字典名字符串,直接用该字符串作为窗口标题,同时从infections中动态取出对应字典内容:

def escrito(dict_name: str):
    target_dict = getattr(infections, dict_name)
    write_window = Toplevel(root)
    # 直接使用字典名作为窗口标题
    write_window.title(dict_name)
    writing_box = tk.Text(write_window, font = ("calibri", 20), width  = 60, height = 15, wrap=WORD)
    # 注意:原代码同时调用pack和grid会触发布局冲突,需删除其中一行,这里保留grid
    writing_box.grid(row = 0, column = 0, sticky = 'nswe')
    texto = '\n'.join(key + ":\n" + value for key, value in target_dict.items())
    writing_box.insert("1.0", texto)

对应的调用逻辑只需做批量替换即可,原有上百个函数只需统一修改为如下格式:

def septic_osteo():
    escrito("Septic_arthritis")

方案2:调用栈解析(无需修改现有调用代码,灵活性高)

如果不想修改已有的上百个调用函数,可以通过inspect模块解析调用栈代码,自动提取字典名:

import inspect
import re

def escrito(**kwargs):
    write_window = Toplevel(root)
    # 解析上一层调用的代码字符串,提取字典名
    caller_code = inspect.stack()[1].code_context[0].strip()
    name_match = re.search(r'infections\.(\w+)', caller_code)
    if name_match:
        write_window.title(name_match.group(1))
    
    writing_box = tk.Text(write_window, font = ("calibri", 20), width  = 60, height = 15, wrap=WORD)
    writing_box.grid(row = 0, column = 0, sticky = 'nswe')
    texto = '\n'.join(key + ":\n" + value for key, value in kwargs.items())
    writing_box.insert("1.0", texto)

注意:该方案依赖调用代码的格式为escrito(**infections.XXX),如果调用格式发生变化,正则匹配可能失效,因此优先推荐方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:05