【发布时间】:2014-12-19 01:22:45
【问题描述】:
我有一个 tkinter 界面,我需要在其中显示一些查询结果,并且我需要用户能够修改列并提交结果。目前要提取查询,我正在做这样的事情:
conn = connection_info_goes_here
cur = conn.cursor()
cur.execute(query_goes_here)
这是我的查询:
SELECT id, reviewer, task, num_seconds, start_time, end_time
FROM hours
WHERE DATE(start_time) = '2014-12-18'
AND reviewer = 'john'
用户需要修改的字段是num_seconds(只是数字)。我的问题是,如何使查询结果显示在网格中,如何使其中一个字段可以通过按钮修改以提交更改?
附加信息:我已经使用exec() 以一种非常混乱的方式完成了这项工作,并以编程方式为每个字段创建变量。它变得非常漫长和令人困惑,我真的认为必须有更好、更简单的方法来做到这一点。
感谢任何帮助。谢谢!!
快速更新:因为这被搁置了,我将添加与我正在寻找的东西相似的图像:
当我将条目标签中的值上传回数据库时,它们必须替换右侧列中的值。
当我说我以一种凌乱的方式这样做时,是因为我这样做了(我能想到的唯一方式):
def cor_window():
corrections = Tk()
corrections.title("Corrections")
corrections_frame = ttk.Frame(corrections)
cor_values = []
count=0
cor_count=0
for x in results:
count2=0
for y in results[count]:
if count2 == 3:
exec('int' + str(cor_count) + '=tkinter.StringVar')
exec('int' + str(cor_count) + '_entry = ttk.Entry(corrections, width=20, textvariable=int' + str(cor_count) + ')')
exec('int' + str(cor_count) + '_entry.grid(column=count2, row=count+2)')
cor_count = cor_count+1
cor_values.append('int' + str(cor_count) + '_entry')
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)
elif count2 > 3:
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2+1, row=count+2)
else:
ttk.Label(corrections, width=20, anchor=CENTER, relief=SUNKEN, borderwidth=1, text= results[count][count2]).grid(column=count2, row=count+2)
count2=count2+1
count=count+1
ttk.Button(corrections, text="Done!", command=upload_cor).grid(column=0, row=1)
其中results 是包含查询结果的列表,upload_cor 是将更改上传到数据库的函数。由于我使用了exec,因此即使用户修改了输入框,我也无法使用.get() 来获取用户输入的内容。当我尝试使用.get() 时,即使在输入框中输入了某些内容,我也只会得到None。
我只是需要一种不同的方法来做到这一点,再次欢迎任何想法。
【问题讨论】:
-
num_seconds 将使用条目(或条目 ID 列表),其余为标签。您还必须将行号链接到记录并将每个条目与原始值进行比较以查看哪些行已更改,但如果“id”是唯一的,那么它应该很简单。条目小部件信息effbot.org/tkinterbook/entry.htm
标签: python python-3.x tkinter