2017-01-11 9 views
0

同じウィンドウでさらにディレクトリを選択したいと思います。ディレクトリの選択のために私はクラスSelectDirを準備しました。私がクラスGuiから呼び出すこのオブジェクト(SelectDirOpenDirWnd()を使って)。今度はクラスからtk.Entryのディレクトリ名をGuiに取得できません。他のクラスのtkinterボタンコマンドを使用

import tkinter as tk 
from tkinter.filedialog import askdirectory 

class SelectDir(): 
    def __init__(self,master, title,dirInit): 
     self.dir_opt = options = {} 

     self.dirInit   = dirInit 
     options['parent']  = master 
     options['title']  = title 
     options['initialdir'] = self.dirInit 
     self.master   = master 
     self.dirSelect  = tk.StringVar() 
     self.dirSelect.set(self.dirInit) 

    def OpenDirWnd(self): 
     self.master.grab_set() 
     self.dirSelect = askdirectory(**self.dir_opt) 
     if self.dirSelect == "": 
      self.dirSelect.set(self.dirInit) 

    def NameSelectDir(self): 
     return self.dirSelect 

class Gui(tk.Frame): 
    def __init__(self,master): 
     tk.Frame.__init__(self, master) 
     frMaster = tk.Frame(master) 

     seldir = SelectDir(master, " Select directory", 
          "D:\\MyPgm\\Python\\Tiles_8") 
     button = tk.Button(frMaster,text=">>>",command = seldir.OpenDirWnd) 
     frMaster.place(relx=0.04, rely=0.35) 
     button.grid(column = 0, row=0) 
     self.actDir = tk.StringVar() 

     self.actDir.set("D:\\MyPgm\\Python\\Tiles_8") 
     entry= tk.Entry(frMaster,textvariable = self.actDir,width = 30) 
     entry.grid(column = 0, row=1) 

wndRoot = tk.Tk() 
appapp = Gui(master=wndRoot) 
appapp.mainloop() 
+0

あなたはGui' 'で関数を作成してに割り当てる必要がありますこの関数は 'SelectDir'を使用し、後で' SelectDir'から情報を取得し、 'Entry'に入れます。 – furas

答えて

0

あなたはGuiで関数を作成して、ボタンに割り当てる必要があります - と、この関数は、ウィンドウを表示し、後でSelectDirから情報を取得し、BTW Entry

に入れてSelectDirを使用する必要があります。私は、すなわち(いくつかのコードを変更しました。名前我々はLOWER_CASE関数/メソッドや変数の名前とクラスのためのキャメルケースの名前を好むので、より多くのを参照してください:。PEP 8 -- Style Guide for Python Code

import tkinter as tk 
from tkinter.filedialog import askdirectory 

# --- classes --- 

class SelectDir(): 

    def __init__(self, master, title, initial): 
     self.master = master 

     self.initial = initial 
     self.selected = initial 

     self.options = { 
      'parent': master, 
      'title': title, 
      'initialdir': initial, 
     } 

    def show(self): 
     result = askdirectory(**self.options) 
     if result: 
      self.selected = result 
      #self.options['initialdir'] = result 
     # or 
     #return self.selected 

    def get(self): 
     return self.selected 


class Gui(tk.Frame): 

    def __init__(self, master): 
     tk.Frame.__init__(self, master) 

     frame = tk.Frame(master) 
     frame.pack() 

     self.seldir = SelectDir(self, "Select directory", "D:\\MyPgm\\Python\\Tiles_8") 

     button = tk.Button(frame, text=">>>", command=self.select_dir) 
     button.grid(column=0, row=0) 

     self.act_dir = tk.StringVar() 
     self.act_dir.set("D:\\MyPgm\\Python\\Tiles_8") 

     entry = tk.Entry(frame, textvariable=self.act_dir, width=30) 
     entry.grid(column=0, row=1) 

    def select_dir(self): 
     self.seldir.show() 
     self.act_dir.set(self.seldir.get()) 
     # or 
     #result = seldir.show() 
     #self.act_dir.set(result) 

# --- main --- 

root = tk.Tk() 
app = Gui(root) 
root.mainloop() 
+0

あなたの答えをありがとう。私はそれをテストする。 – jasan

関連する問題