Python 在Tkinter中动态设置条目小部件值

Python 在Tkinter中动态设置条目小部件值,python,tkinter,tk,Python,Tkinter,Tk,我有一个窗口来浏览包含必要文件的文件夹。我正在使用tkFileDialog进行同样的操作。我想将Entry widget的值设置为该选定文件夹的值。最初,如果未选择任何文件夹,则该文件夹将为空。一旦我选择了文件夹,所选文件夹的路径就会出现在条目小部件中。用户应该能够修改。下面提到的是相同的代码 from Tkinter import * from tkFileDialog import * class Checkit: root = Tk() #default string t

我有一个窗口来浏览包含必要文件的文件夹。我正在使用tkFileDialog进行同样的操作。我想将Entry widget的值设置为该选定文件夹的值。最初,如果未选择任何文件夹,则该文件夹将为空。一旦我选择了文件夹,所选文件夹的路径就会出现在条目小部件中。用户应该能够修改。下面提到的是相同的代码

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)