Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 如何使用tkFileDialog.askdirectory的输出填充tkinter输入框_Python_User Interface_Tkinter - Fatal编程技术网

Python 如何使用tkFileDialog.askdirectory的输出填充tkinter输入框

Python 如何使用tkFileDialog.askdirectory的输出填充tkinter输入框,python,user-interface,tkinter,Python,User Interface,Tkinter,我有一个tkinter输入框,用户可以在其中插入目录的路径。或者,用户可以单击按钮选择目录。如何设置按钮的输出以填充输入框?我尝试了以下方法,但dirname不是全局变量,因此UserFileInput无法识别。另外,如何绑定输入字段旁边的按钮 from Tkinter import * import tkFileDialog def askdirectory(): dirname = tkFileDialog.askdirectory() return dirname def Us

我有一个tkinter输入框,用户可以在其中插入目录的路径。或者,用户可以单击按钮选择目录。如何设置按钮的输出以填充输入框?我尝试了以下方法,但
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()

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

但是,如果dirname-else状态为,我不确定您试图通过
text=str(dirname)实现什么。既然还不能在那里定义
dirname
,为什么不直接使用
text=status

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

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

UserFileInput需要返回w,以便稍后使用函数的输出。我试图实现的是
Entry
要么包含
status
给出的默认文本,要么在用户选择目录后打印
askdirectory
命令的输出。这样,用户可以在输入框中键入目录位置,或通过鼠标选择目录位置自动填充输入框。要执行您描述的操作,您不需要返回w,但如果您觉得必须同时返回w和var。因为输入使用
textvariable=var
,任何用它写的东西都可以用
var.get()
检索,你可以用
var.set('text')
把你想要的东西放进去。恐怕这不能回答问题。如果目录框为空,并且用户通过
askdirectory
选择目录,则所选目录应传播到输入框。这段代码只是将框中的内容打印到终端上,这不是我想要的。你真的试过askdirectory按钮吗?它将选定的路径放入输入框中。额外的打印按钮只是显示输入框中的任何内容(用户编写或通过按钮输入)都可以从任何地方检索。我尝试过askdirectory按钮,但没有任何作用。我假设它将选择的目录放入相关变量中,但它肯定不会将目录放入GUI的输入框中。这似乎是一件非常明显的事情。我很惊讶这么难。