使用tkinter ttkbootstrap遇AttributeError:'str'对象无'get'属性
解决UAM求值器新窗口显示结果的AttributeError问题
错误原因
AttributeError: 'str' object has no attribute 'get' 说明你在代码中对一个字符串对象调用了get()方法,但get()是tkinter输入控件(如Entry)的专属方法,字符串本身没有这个方法。大概率是你误将输入控件的内容(字符串)当成了控件本身来使用。
修正步骤(结合常见场景)
错误逻辑示例
如果你写了类似下面的代码,就会触发错误:
# 错误:把输入内容提前存成字符串,后续又对字符串调用get() input_text = input_entry.get() # 传到新窗口后尝试调用get() result = input_text.get()
或者是控件引用丢失:
# 错误:连写pack()导致input_entry变成None input_entry = ttk.Entry(root).pack() # 后续调用input_entry.get()也会报错
正确写法要点
- 保存输入控件的引用,不要直接连写布局方法(
pack()/grid()等),因为布局方法返回None。 - 仅在需要计算时,再调用控件的
get()方法获取字符串内容。
完整可运行修正代码
import tkinter as tk from ttkbootstrap import Style, Window, ttk def calculate_and_show_result(): # 此时才调用get()获取输入内容 input_content = input_entry.get() # 替换为你的UAM求值逻辑 try: # 示例:简单表达式求值,实际替换成你的UAM计算逻辑 calculation_result = eval(input_content) except Exception as e: calculation_result = f"计算错误: {str(e)}" # 创建新窗口展示结果 result_win = Window(title="UAM计算结果", size=(320, 180)) ttk.Label(result_win, text="计算结果:", font=("微软雅黑", 12)).pack(pady=15) result_label = ttk.Label(result_win, text=str(calculation_result), font=("微软雅黑", 16, "bold")) result_label.pack(pady=8) ttk.Button(result_win, text="关闭窗口", command=result_win.destroy).pack(pady=12) result_win.mainloop() # 主窗口初始化 style = Style(theme="litera") main_win = Window(title="UAM简易求值器", size=(450, 220)) # 输入区域:保存控件引用,分开写布局 ttk.Label(main_win, text="输入UAM表达式:", font=("微软雅黑", 12)).pack(pady=12) input_entry = ttk.Entry(main_win, font=("微软雅黑", 14), width=30) input_entry.pack(pady=8) ttk.Button(main_win, text="开始计算", command=calculate_and_show_result).pack(pady=18) main_win.mainloop()
核心注意事项
- 控件创建和布局要分开写:比如
input_entry = ttk.Entry(root)之后单独写input_entry.pack(),避免控件引用变成None。 - 不要提前把输入内容存成字符串,只在需要计算时调用
get()获取。 - 新窗口可以直接用ttkbootstrap的
Window类,和主窗口用法一致,无需额外配置。
内容的提问来源于stack exchange,提问作者Mestawot Marimo
相关产品推荐
相关产品推荐

