Tkinter将条目名称传递给函数

时间:2015-12-23 21:37:58

标签: python mysql tkinter

我是一个蟒蛇/ Tkinter新手,所以提前我会要求你不要向我的方向扔香蕉/腐烂的西红柿/粪便。

我正在编写一些将用作数据记录器的代码,这些代码将构建为捕获多个数据值。目前,程序从mysql数据库中读取一组测量线和数据点,并使用每个元素旁边的按钮将现有值填充到Entry元素中。这个概念是当用户单击相邻Entry元素旁边的按钮时,Entry值将使用新数据值进行更新。

我遇到的具体问题是将Entry元素名称传递给函数以覆盖其内容:

for row in rows:
    cnt=cnt+1
    Label(frame, text="Station: "+str(row[2]), bg=backcolor).grid(row=cnt, column=0)
    e1 = Entry(frame)
    e1.config(width=5)
    if row[5]!="":#ensure data value is not null, or insert empty space
        e1.insert(0, str(row[5]))
    else:
        e1.insert(0, " ")
    e1.grid(row=cnt,column=1)
    e2 = Button(frame, text="Log Data "+str(row[0]), command=lambda: saveData(e1))
    e2.grid(row=cnt, column=2)
...
def saveData(entryid):
    print Entry.get(entryid)

问题在于saveData(e1)。它似乎只传递由行构造函数中的For行生成的最后一个元素。我在这里缺少什么来将每个按钮绑定到其特定的Entry元素?

BTW,我正在使用Python 2.7

提前感谢您的协助。

以下是Curly Joe指出的解决方案:

def saveData(stationdata):
    print Entry.get(stationdata)
def getData():
    #DATA TO GET SQL RESULTS/PREPARE FRAMED CANVAS ELEMENT HERE FOR SCROLLBARS
    for row in rows:
        cnt=cnt+1
        Label(frame, text="Station: "+str(row[2]), bg=backcolor).grid(row=cnt, column=0)
        e1 = Entry(frame)#Data Entry 
        e1.config(width=5)
        if row[5]!="":
                e1.insert(0, str(row[5]))
        else:
                e1.insert(0, "NA")
        e1.grid(row=cnt,column=1)
        e2 = Button(frame, text="Log Data "+str(row[0]), command=partial(saveData, e1))
        e2.grid(row=cnt, column=1)

1 个答案:

答案 0 :(得分:-1)

回调始终将事件作为第一个参数。尝试更改

def saveData(entryid)

def saveData(event, entryid)