在python中读取多个按钮的特定行

时间:2014-05-09 14:49:58

标签: python tkinter

我有一个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()

1 个答案:

答案 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