我有一个SQLite dabatase文件和一个python文件,其中包含tkinter
生成的多个按钮。
我想要做的是通过仅使用一个函数来读取具有不同按钮的不同行。
我目前得到的是所有行都没有按下按钮,我真的需要帮助,我将非常感激
import Tix as tk from Tkinter import * import sqlite3 as lite import
sys
def show_POI():
POI= tk.Tk()
POI.geometry("%dx%d+%d+%d" %(320,240,0,0))
POI.title("Points Of Interest")
menu=tk.Button(POI, height=1, width=5, text='Menu')
menu.pack()
label = tk.Label(POI)
label.pack()
sw= tk.ScrolledWindow(POI, scrollbar=tk.Y) # just the vertical scrollbar
sw.pack(fill=tk.BOTH, expand=1)
con = lite.connect('databaseDB.sqlite')
with con:
cur = con.cursor()
cur.execute("SELECT * FROM Location")
result = cur.fetchall()
def show_info(x):
cur.execute("SELECT * FROM Location WHERE ID = "+str(x)+"")
result = cur.fetchall()
print result
return result
i=1
for row in result:
text = row[1]
e=tk.Button(sw.window,height=2,width=40,text=text,anchor=W,
command=show_info(i))
e.pack()
i=i+1
POI.mainloop()
show_POI()
答案 0 :(得分:1)
在创建按钮之前,您当前正在调用show_info()
,这就是为每次迭代循环打印结果的原因。您可以使用lambda表达式传递参数,并为每个命令分配一个默认参数i
(否则只有i
的最后一个已知值将设置为每个按钮)
e=tk.Button(sw.window,height=2,width=40,text=text,anchor=W,
command=lambda i=i: show_info(i))
这应该解决这个问题,但另外要提一下的是,您可以从return result
函数中删除show_info()
,因为它不会返回任何内容。希望有所帮助。
有关按钮和回调的更多信息:http://effbot.org/zone/tkinter-callbacks.htm