Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从for循环中的输入框中获取值_Python_Python 2.7_Tkinter - Fatal编程技术网

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

Python 从for循环中的输入框中获取值,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,下面是我正在处理的功能问题。我不知道要多久,弗兰克“将是因为在真实的程序中,他是由一行文本创建的。发生了两件事。1) 在这个小演示中,它没有等待按钮按下,它只是为应该反映条目的内容打印空值。2) 当我使用这个函数打印到csv时,我得到的是一个字符串形式的输入框实例。我想修好一个会修好另一个。谢谢 from Tkinter import * import ttk def getThat(top,bottom): bottom = bottom.get() print ('%s:

下面是我正在处理的功能问题。我不知道要多久,弗兰克“将是因为在真实的程序中,他是由一行文本创建的。发生了两件事。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()
我想

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

问题是它在创造中被召唤。。。把它放在一只羔羊身上,它就不可能了;我会一直等到点击

或者,可能更好的形式是创建一个函数

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)
    ...

如果你想知道修复是什么,我会把它贴在这里

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()

我添加了一些其他内容,以确保我也理解了这些原则。

我喜欢这个想法,但您建议的修复方法给了我一个列表索引超出范围的错误。我可以通过说larry=frank[x]并用larry替换frank来解决这个问题,但是它只给出了最终的条目值(所有打印的内容都是“not beets:”green beans“)。我需要把它们都找回来。谢谢,直到只给我最后一个输入值。请参阅第二次编辑。。。因为addMore是循环中的一个。。。现在它被functools.partial(与x相同)锁定到了正确的实例,即使进行了编辑,它仍然只提供最终值。顺便说一下,我非常感谢您的帮助。