2016-07-29 15 views
0

我設法打開了一個頁面,然後是第二個頁面,其中包含一個文件瀏覽器按鈕。我想讓用戶輸入這個文件瀏覽器的選項(複製並粘貼到輸入欄中)。在用戶輸入目錄或使用按鈕瀏覽之後,我希望目錄出現在欄中。使用Tkinter的目錄瀏覽器和輸入欄

import tkinter as tk 
from tkinter import ttk 
from tkinter.filedialog import askdirectory 

LARGE_FONT= ("Calibri", 12) 

class RevitJournalSearch(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     for F in (StartPage, PageOne):    
      frame = F(container, self) 
      self.frames[F] = frame 
      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self,parent) 
     label = ttk.Label(self, text="""What to expect from this... 
          \n 
          \n-Browse folder location""", font=LARGE_FONT) 
     label.pack(pady=10,padx=10) 

     button1 = ttk.Button(self, text="Continue", 
          command=lambda: controller.show_frame(PageOne)) 
     button1.pack() 
     button2 = ttk.Button(self, text="Close", 
          command=quit) 
     button2.pack() 

class PageOne(tk.Frame): 

    def __init__(self, parent, controller, master): 
     tk.Frame.__init__(self,parent) 
     label = ttk.Label(self, text="File Select", font=LARGE_FONT) 
     label.pack(pady=10,padx=10) 

     errmsg = 'Error!' 
     button_browser = ttk.Button(self, text="BROWSE", 
            command= self.callback) 
     button_browser.pack() 

    def callback(self): 
     self.name= askdirectory() 

app = RevitJournalSearch() 
app.mainloop() 

我不確定在哪裏放置self.entry的代碼。

+0

試圖刪除重複的代碼。請檢查一切(縮進等)現在是否可以。 – Lafexlos

回答

1

我相信這是this question的副本。它歸結爲以下幾點。

  1. 創建一個StringVar變量,然後創建一個輸入框是依賴於這個StringVar。該框將顯示該變量當前所持有的內容。

    self.name = tk.StringVar() 
    dir_box = tk.Entry(self, textvariable=self.name) 
    
  2. 將此變量與askdirectory調用的返回值。

    def callback(self): 
        filename = tkFileDialog.askdirectory() 
        self.name.set(filename)