我是一个蟒蛇/ 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)
答案 0 :(得分:-1)
回调始终将事件作为第一个参数。尝试更改
def saveData(entryid)
到
def saveData(event, entryid)