Python 如何使用tkFileDialog.askdirectory的输出填充tkinter输入框
我有一个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
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的输入框中。这似乎是一件非常明显的事情。我很惊讶这么难。