如何将变量分配给Tkinter输入?

时间:2015-06-10 21:37:19

标签: python tkinter

我使用以下代码创建一个包含三个输入的小部件。

我能够修改此代码以按需要格式化窗口小部件,但我需要根据窗口小部件中字段的输入复制文件。例如,如果用户输入'A''1''X',则需要将文件A1X从网络驱动器复制到本地驱动器。

我认为我需要将每个输入字段分配给变量,然后我可以设置条件来获取正确的文件,但我无法弄清楚如何设置这些变量。

from tkinter import *
fields = 'Project #', 'Reel #', 'Batch #'

def fetch(entries):
   for entry in entries:
   field = entry[0]
   text  = entry[1].get()
   print('%s: "%s"' % (field, text)) 

def makeform(root, fields):
   entries = []
   for field in fields:
      row = Frame(root)
      lab = Label(row, width=15, text=field, anchor='w')
      ent = Entry(row)
      row.pack(side=TOP, fill=X, padx=5, pady=5)
      lab.pack(side=LEFT)
      ent.pack(side=RIGHT, expand=YES, fill=X)
      entries.append((field, ent))
   return entries

if __name__ == '__main__':
   root = Tk()
   ents = makeform(root, fields)
   root.bind('<Return>', (lambda event, e=ents: fetch(e)))   
   b1 = Button(root, text='OK',
      command=(lambda e=ents: fetch(e)))
   b1.pack(side=RIGHT, padx=5, pady=5)
   b2 = Button(root, text='Reset', command=root.quit)
   b2.pack(side=RIGHT, padx=5, pady=5)
   root.mainloop()

2 个答案:

答案 0 :(得分:0)

  1. 您应该使用字典作为条目。
  2. 您的功能获取位于正确的路径上。
  3. 这是一个固定版本(假设条目是字典):

    def fetch(entries):
       filename = ''.join(entries[f].get() for f in fields)
       print(filename)
       #whatever you want to do with the result
    

答案 1 :(得分:0)

您需要使用StringVar()并向textvariable提供Entry()

for field in fields:
    row = Frame(root)
    lab = Label(row, width=15, text=field, anchor='w')
    entry_variable = StringVar(root)
    ent = Entry(row, textvariable=entry_variable)
    row.pack(side=TOP, fill=X, padx=5, pady=5)
    lab.pack(side=LEFT)
    ent.pack(side=RIGHT, expand=YES, fill=X)
    entries.append((field, entry_variable))

获取数据(修复缩进后):

def fetch(entries):
    for entry in entries:
        field = entry[0]
        text  = entry[1].get()
        print('%s: "%s"' % (field, text))