Python 在Tkinter中动态设置条目小部件值
我有一个窗口来浏览包含必要文件的文件夹。我正在使用tkFileDialog进行同样的操作。我想将Entry widget的值设置为该选定文件夹的值。最初,如果未选择任何文件夹,则该文件夹将为空。一旦我选择了文件夹,所选文件夹的路径就会出现在条目小部件中。用户应该能够修改。下面提到的是相同的代码Python 在Tkinter中动态设置条目小部件值,python,tkinter,tk,Python,Tkinter,Tk,我有一个窗口来浏览包含必要文件的文件夹。我正在使用tkFileDialog进行同样的操作。我想将Entry widget的值设置为该选定文件夹的值。最初,如果未选择任何文件夹,则该文件夹将为空。一旦我选择了文件夹,所选文件夹的路径就会出现在条目小部件中。用户应该能够修改。下面提到的是相同的代码 from Tkinter import * from tkFileDialog import * class Checkit: root = Tk() #default string t
from Tkinter import *
from tkFileDialog import *
class Checkit:
root = Tk()
#default string to be displayed in the entry of path
path_to_file = StringVar(root, value="abc")
def __init__(self):
self.inputDetail()
def inputDetail(self):
#copy the root window
master = self.root
#create frame for details in the root window
details_frame = Frame(master)
details_frame.grid(row=0, column=0)
#Create the Labels
papercode_label = Label(details_frame, text="Paper code:")
subject_label = Label(details_frame, text="Subject:")
chapter_label = Label(details_frame, text="Chapter:")
batch_label = Label(details_frame, text="Batch:")
ansFolder_label = Label(details_frame, text="Folder containing answer-keys:")
#create entry for the labels
papercode_entry = Entry(details_frame)
subject_entry = Entry(details_frame)
chapter_entry = Entry(details_frame)
batch_entry = Entry(details_frame)
ansFolder_entry = Entry(details_frame)
#create button to add path
path = Button(details_frame, text="Browse", command= lambda: self.addpath(details_frame))
#button to enter the next window
next = Button(details_frame, text="Next", command= lambda: self.checkOmr(details_frame, master))
#Use grid layout to place labels and entry
papercode_label.grid(row=0, sticky=W)
papercode_entry.grid(row=1, sticky=W)
subject_label.grid(row=2, sticky=W)
subject_entry.grid(row=3, column=0, sticky=W)
chapter_label.grid(row=4, sticky=W)
chapter_entry.grid(row=5, column=0, sticky=W)
batch_label.grid(row=6, sticky=W)
batch_entry.grid(row=7, column=0, sticky=W)
ansFolder_label.grid(row=8, sticky=W)
path.grid(row=9, sticky=W, columnspan=2)
next.grid(row=10, sticky=E, columnspan=2)
master.mainloop()
def checkOmr(self, old_frame, master):
#destoy the old frame
old_frame.destroy()
#create frame for details in the root window
inputPath_frame = Frame(master)
inputPath_frame.grid(row=0, column=0)
#create label to input folder containing
omrFolder_label = Label(inputPath_frame, text="Folder containing OMR sheet to be checked:")
#create button to add path
path = Button(inputPath_frame, text="Browse", command= lambda: self.addpath(inputPath_frame))
selected_path = Entry(inputPath_frame, textvariable=self.path_to_file)
#place the label and button on the grid
omrFolder_label.grid(row=0, sticky=W)
path.grid(row=1, column=0, sticky=W)
selected_path.grid(row=1, column=1, sticky=W)
#master.mainloop()
def addpath(self, details_frame):
self.path_to_file = askdirectory(parent=details_frame,initialdir="/",title='Please select a directory')
if __name__=='__main__':
handle = Checkit()
在这里,我试图改变自我。单击按钮时的路径到文件值。我试图将self.path_的值打印到addpath()中的文件值。它在那里给出了正确的结果,但是checkOMR()中的selected_path项中的值没有修改
有人能建议我应该做些什么改变来实现这一点吗。看这行:
self.path_to_file = askdirectory(...)
在这行代码运行之前,self.path_to_file
是StringVar
的一个实例。在这行代码运行之后,self.path\u to\u file
被重置为一个字符串
假设希望self.path_to_file
保持StringVar
的实例,则需要将该行更改为:
path = askdirectory(...)
self.path_to_file.set(path)