我有一个tkinter输入框,用户可以在其中输入目录的路径。或者,用户可以单击按钮以选择目录。如何设置按钮的输出以填充“输入”框?我尝试了以下操作,但是dirname
不是全局变量,因此UserFileInput
无法识别。另外,我该如何绑定(bind)输入字段旁边的按钮。
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
。然后,您可以在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()