Python 清除tkinter条目小部件中的文本

Python 清除tkinter条目小部件中的文本,python,user-interface,tkinter,Python,User Interface,Tkinter,我使用Tkinter条目小部件允许用户向GUI输入文本。条目小部件有默认文本,我想用一个按钮来清除它。我有以下代码: from Tkinter import * def delete_entries(fields): for field in fields: field.delete(0,END) def UserInput(status,name): optionFrame = Frame(root) optionLabel = Label(optionFrame)

我使用Tkinter条目小部件允许用户向GUI输入文本。条目小部件有默认文本,我想用一个按钮来清除它。我有以下代码:

from Tkinter import *

def delete_entries(fields):
  for field in fields:
    field.delete(0,END)

def UserInput(status,name):
  optionFrame = Frame(root)
  optionLabel = Label(optionFrame)
  optionLabel["text"] = name
  optionLabel.pack(side=LEFT)
  var = StringVar(root)
  var.set(status)
  w = Entry(optionFrame, textvariable= var)
  w.pack(side = LEFT)
  optionFrame.pack()

if __name__ == '__main__':
  root = Tk()
  fields = 'ExperimentNumber', 'OutputFileName', 'npts1', 'block1'    
  ExperimentNumber = UserInput("1", "Experiment number")
  OutputFileName = UserInput("output.txt", "Output file name")
  npts1 = UserInput("1000", "Number of points")
  block1 = UserInput("8", "Block size")

  Delete_button = Button(root, text = 'Clear all', command = delete_entries(fields))
  Delete_button.pack()
我已尝试使用要删除的变量列表(如上所述)创建
字段
,并在函数
delete_entries()
中对其进行迭代,但这会返回错误,因为字段中的条目是字符串。例如,我尝试用
fields=ExperimentNumber
替换字段,但这会返回一个错误,因为ExperimentNumber尚未定义。最后,我尝试将
ExperimentNumber
放入delete函数,即

def delete_entries():
      ExperimentNumber.delete(0,End)

但这不起作用,因为
ExperimentNumber
具有属性
NoneType
(我不明白为什么会这样,因为
delete\u entries()
函数直到通过函数
UserInput
创建
ExperimentNumber
条目小部件后才会调用)。如何删除条目小部件中的所有文本?在我的实际代码中,我有大约20个这样的字段,希望用户能够用一个按钮清除所有字段。

您的思路是正确的,但您错过了两件小事。我在您的代码中添加了这两个,并试图用注释进行解释

from Tkinter import *

def delete_entries():
  for field in fields:
    field.delete(0,END)

def UserInput(status,name):
  optionFrame = Frame(root)
  optionLabel = Label(optionFrame)
  optionLabel["text"] = name
  optionLabel.pack(side=LEFT)
  var = StringVar(root)
  var.set(status)
  w = Entry(optionFrame, textvariable= var)
  w.pack(side = LEFT)
  optionFrame.pack()
  return w
  #this return is crucial because if you don't return your widget's identity,
  #you can not use them in another function

if __name__ == '__main__':
  root = Tk()    
  ExperimentNumber = UserInput("1", "Experiment number")
  OutputFileName = UserInput("output.txt", "Output file name")
  npts1 = UserInput("1000", "Number of points")
  block1 = UserInput("8", "Block size")
  #you are saying it does not work because of they are strings.
  #then don't assign strings to fields. assign variables.
  fields = ExperimentNumber, OutputFileName, npts1, block1
  #since fields is defined in global scope, you don't need to use it as parameter

  Delete_button = Button(root, text = 'Clear all', command = delete_entries)
  Delete_button.pack()

  root.mainloop()