Tkinter与SQLite变量传递异常:报表功能无法获取用户输入SQL查询
问题解决:Tkinter中SQL查询无法传递到表格展示的问题
问题根源
你在ReportGUI函数里,Entered = entryrep.get()这行代码是在窗口初始化时就执行的,此时用户还没在输入框里输入任何内容,所以Entered一开始就是空字符串。后续点击按钮时,lambda传递的是这个初始空值,自然查不到数据。
修复后的代码
修改按钮的command参数,让它在点击时实时获取输入框的内容,而不是用初始化时的空值:
def displaytable(Entered): repwin1 = Tk() repwin1.geometry("400x400") print(Entered) try: r_set = con.execute(Entered) i = 0 for Fishy in r_set: for j in range(len(Fishy)): e = Entry(repwin1, width=5, fg='blue') e.grid(row=i, column=j) e.insert(END, Fishy[j]) i += 1 print("数据加载完成") except Exception as e: print(f"查询出错: {e}") # 可添加弹窗提示用户SQL输入错误 def ReportGUI(): repwin = Tk() repwin.geometry("400x400") label12 = Label(repwin, text="assisted query builder") label12.pack() entryrep = Entry(repwin, width=50) entryrep.focus_set() entryrep.pack() # 关键修改:在lambda里实时调用entryrep.get()获取输入内容 buttonfish = ttk.Button(repwin, text="Report", width=20, command=lambda: displaytable(entryrep.get())) buttonfish.pack()
额外优化建议
- 添加异常捕获:防止用户输入错误SQL导致程序崩溃,还可以用
tkinter.messagebox弹出可视化错误提示。 - 改用
Toplevel()创建新窗口:Tkinter应保持一个主Tk()实例,新窗口用Toplevel()更规范。 - 替换表格控件:用
ttk.Treeview替代大量Entry控件,表格展示更美观且支持排序、滚动等功能。
内容的提问来源于stack exchange,提问作者rocks2260
相关产品推荐
相关产品推荐

