从for循环中的输入框获取值

时间:2014-02-11 20:48:47

标签: python python-2.7 tkinter

以下是我正在处理的功能问题。我不知道在真正的程序中他将用一行文字创建多长时间“坦率”。发生的事情是2件事.1)在这个小型演示中,它不是在等按钮按下它只打印应该反映条目的空值.2)当我使用此函数打印到csv时,我将输入框实例作为字符串。我认为修复一个将修复另一个。谢谢。

from Tkinter import * 
import ttk

def getThat(top,bottom):
    bottom = bottom.get()
    print ('%s: "%s"' % (top, bottom))


root = Tk()
root.title("This space intentionally left blank")
root.minsize(900,200)
mainframe = ttk.Frame(root) 
mainframe.grid(column = 1, row = 1)

frank = ["beany", "beans", "beens", "not beets"]
x=0
for f in frank:
    ttk.Label(mainframe, text=frank[x]).grid(column=x+1, row=2)  
    addMore = StringVar()
    moreBeans = ttk.Entry(mainframe, textvariable=addMore)
    moreBeans.grid(column =x+1, row =3)
    ttk.Button(mainframe, text = "Do It", command = getThat(frank[x], addMore)).grid(column=1, row=5, pady=5)
    x+=1
root.mainloop()

2 个答案:

答案 0 :(得分:1)

我认为

 ttk.Button(mainframe, text = "Do It", command = lambda *a: getThat(frank[x], addMore)).grid(column=1, row=5, pady=5)

应该解决它

问题在于它被创造出来......通过把它放在一个lambda中它不会发生;直到点击

另外,可能更好的形式是创建一个函数

def OnClick(*args):
    return getThat(frank[x], addMore)

ttk.Button(mainframe, text = "Do It", command =OnClick).grid(column=1, row=5, pady=5)

因为你处于循环中,你可能需要做类似

的事情
def OnMyClick(x,addMore,*args):
    return getThat(frank[x], addMore)
import functools
for x,f in  enumerate(frank):
   ...
    my_listener = functools.partial(OnMyClick,x,addMore)
    ttk.Button(mainframe, text = "Do It", command = my_listener)
    ...

答案 1 :(得分:0)

如果你想知道修复是什么,我会在这里发布

from Tkinter import * 
import ttk
import nltk
import csv

frank = ["beany", "beans", "beens", "not beets"]
letters = ["a","s","d","f"]
newInputs=[]
allTheBeans=[]
def getThat(newInputs):
    for inputs in newInputs:
        allTheBeans.append((inputs[0], inputs[1].get()))
    print allTheBeans
def makeBoxes (root, frank):
    for x in range(0, len(frank)):
        Label(mainframe, text=frank[x]).grid(column=x+1, row=2)
        moreBeans = ttk.Entry(mainframe)
        moreBeans.grid(column =x+1, row =3)
        moreBeans.insert(0,letters[x])
        newInputs.append((frank[x],moreBeans))
    return newInputs

def clearItOut(clearList):
    del clearList [:]

root = Tk()
root.title("This space intentionally left blank")
root.minsize(900,200)
mainframe = ttk.Frame(root) 
mainframe.grid(column = 1, row = 1)
madeBoxes=makeBoxes(mainframe, frank)
ttk.Button(mainframe, text = "Do It", command = lambda *a: getThat(newInputs)).grid(column=1, row=5)
ttk.Button(mainframe, text = "Undo It", command = lambda *a: clearItOut(allTheBeans)).grid(column=1, row=6)
root.mainloop()

我添加了一些其他的东西,以确保我也理解这些校长。