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



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

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

在这里,我正在尝试更改修改自我。 单击按钮时path_to_file值。我尝试在addpath()中打印self.path_to_file值的值。它在那里给出了正确的结果,但 checkOMR() 中条目selected_path中的值不会修改。

有人可以建议我应该做出哪些更改以使该事情成为可能。

请看这一行:

self.path_to_file = askdirectory(...)  

在此行代码运行之前,self.path_to_fileStringVar 的实例。运行此行代码后,self.path_to_file 将重置为字符串。

假设您希望self.path_to_file保持StringVar的实例,您需要将该行更改为:

path = askdirectory(...)
self.path_to_file.set(path)

相关内容

  • 没有找到相关文章

最新更新