2016-07-29 6 views
0

Ich habe es geschafft, eine Startseite zu haben, gefolgt von einer zweiten Seite, die eine Datei-Browser-Taste enthält. Ich möchte die Benutzereingabe in diesen Dateibrowser haben (Kopieren und Einfügen in eine Eingabezeile). Wenn das Verzeichnis entweder vom Benutzer eingegeben oder mit der Schaltfläche durchsucht wird, möchte ich, dass das Verzeichnis in der Leiste angezeigt wird.Verzeichnis-Browser und Eingabe-Leiste mit 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() 

Ich bin mir nicht sicher, wo die self.entry Code zu platzieren.

+0

Versuchte duplizierten Code zu entfernen. Bitte überprüfen Sie, ob alles (Einrückungen usw.) jetzt in Ordnung ist. – Lafexlos

Antwort

1

Ich glaube, das ist ein Duplikat von this question. Worauf es ankommt, ist folgendes.

  1. erstellen StringVar Variable, und dann ein Eingabefeld erstellen, die auf diesen StringVar abhängen. Die Box zeigt an, was diese Variable gerade hält.

    self.name = tk.StringVar() 
    dir_box = tk.Entry(self, textvariable=self.name) 
    
  2. Setzen Sie diese Variable mit dem Rückgabewert Ihrer askdirectory Anruf.

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