如何使用tkFileDialog.askdirectory的输出来填充tkinter Entry框

时间:2014-08-13 09:38:30

标签: python user-interface tkinter

我有一个tkinter Entry框,用户可以在其中插入目录的路径。或者,用户可以单击按钮以选择目录。如何设置按钮的输出以填充“输入”框?我尝试了以下内容,但dirname不是全局变量,因此UserFileInput无法识别。另外如何绑定输入字段旁边的按钮。

from Tkinter import *
import tkFileDialog

def askdirectory():
  dirname = tkFileDialog.askdirectory()
  return dirname

def UserFileInput(status,name):
  optionFrame = Frame(root)
  optionLabel = Label(optionFrame)
  optionLabel["text"] = name
  optionLabel.pack(side=LEFT)
  text = str(dirname) if dirname else status
  var = StringVar(root)
  var.set(text)
  w = Entry(optionFrame, textvariable= var)
  w.pack(side = LEFT)
  optionFrame.pack()
  return w


if __name__ == '__main__':
  root = Tk()


  dirBut = Button(root, text='askdirectory', command = askdirectory)
  dirBut.pack(side = RIGHT)

  directory = UserFileInput("", "Directory")


  root.mainloop()

1 个答案:

答案 0 :(得分:7)

您的UserFileInput应该返回var,而不是w。然后,您可以在var.set(dirname)函数中使用askdirectory,而不必返回任何内容。

我不确定你尝试用text = str(dirname) if dirname else status做些什么。为什么不使用text = status,因为dirname还不能在那里定义?

编辑: 这应该按照你想要的方式工作。 “打印输入文本”按钮显示您可以检索输入框中的任何内容,无论是由用户编写还是放在代码中。

from Tkinter import *
import tkFileDialog

def askdirectory():
  dirname = tkFileDialog.askdirectory()
  if dirname:
    var.set(dirname)

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

def Print_entry():
  print var.get()

if __name__ == '__main__':
  root = Tk()

  dirBut = Button(root, text='askdirectory', command = askdirectory)
  dirBut.pack(side = RIGHT)
  getBut = Button(root, text='print entry text', command = Print_entry)
  getBut.pack(side = BOTTOM)

  w, var = UserFileInput("", "Directory")

  root.mainloop()