用tkinter搭配inspect和getattr可构建实时python对象属性查看gui工具:支持输入表达式获取对象、列出过滤后的属性及类型、双击查看repr值、安全eval更新对象。

用 Python 的 tkinter 搭配 inspect 和 getattr,就能做出一个实时查看任意 Python 对象属性的 GUI 工具。核心思路是:把对象传进去,自动列出它的所有可访问属性(包括值、类型、是否为方法),并支持点击刷新或输入新表达式重新求值。
基础界面:对象输入框 + 属性列表框
主窗口包含两个关键控件:一个 Entry 用于输入对象表达式(比如 list(range(3)) 或 os.path),一个 Listbox 显示属性名。旁边加个“加载”按钮触发解析。初始时可预设一个示例对象(如 [])方便测试。
动态获取属性:用 inspect.getmembers 过滤安全项
调用 inspect.getmembers(obj) 获取所有属性,但需过滤掉私有属性(以 _ 开头)、内置方法(如 __str__)和不可序列化的对象(如 module、function)。保留 str、int、dict、list 等常见类型,以及自定义类实例。对每个属性,用 getattr(obj, attr_name) 取值,并用 type(...).__name__ 获取类型名。
双击查看详情:弹出只读文本窗口显示完整值
在 Listbox 上绑定双击事件,选中某属性后,新开一个 Toplevel 窗口,用 Text 控件显示该属性的 repr() 结果(带换行和缩进)。对长内容自动启用滚动条;对不可打印对象(如 threading.Lock)显示提示“无法安全显示值”。避免直接调用可能触发副作用的方法(如不执行 obj.method(),只显示它是 function 类型)。
支持运行时更新:输入新表达式再 eval(带安全限制)
使用 eval(expression, {"__builtins__": {}}, safe_globals) 执行用户输入,其中 safe_globals 可预置常用模块(如 math、json)和基础类型。禁止访问 os、subprocess 等危险模块。若 eval 失败,在界面底部加一行红色 Label 显示错误信息(如 NameError: name 'x' is not defined),不崩溃。











