2017-01-24 8 views
0

異なるラジオボタンを別のフォルダにリンクしようとしています。私は1つのフォルダを開くことができましたが、すべてのラジオボタンはそのフォルダにリンクされています。私はそれが最初のラジオボタンのパスを使用するのと同じ褒め言葉を持っているからだと理解していますが、それをどのように変更するのか分かりません。私の質問は、どのように私は別のラジオボタンを別のフォルダにリンクできますか? また、1つのフォルダから同時に複数のファイルを開くことはできますか? 私のコードは次のとおりです。異なるラジオボタンを別のフォルダにリンクする方法

from tkinter import* 
from tkinter import filedialog 
import tkinter.constants 

class filedialogexample(tkinter.Frame): 
    def __init__(self, root): 
     tkinter.Frame.__init__(self, root) 
     self.favorite = StringVar() 

     tkinter.Radiobutton(self, text = "Browse 1", variable = self.favorite, 
       command = self.askopenfilename 
       ).grid(row=2, column =0, columnspan = 2, sticky =W) 
     tkinter.Radiobutton(self, text = "Browse 2", variable = self.favorite, 
       command = self.askopenfilename 
       ).grid(row=3, column =0, columnspan = 2, sticky =W) 
     tkinter.Radiobutton(self, text = "Browse 3", variable = self.favorite, 
       command = self.askopenfilename 
       ).grid(row=4, column =0, columnspan = 2, sticky =W) 
     tkinter.Radiobutton(self, text = "Browse 4", variable = self.favorite, 
       command = self.askopenfilename 
       ).grid(row=5, column =0, columnspan = 2, sticky =W) 


     self.dir_opt = options = {} 
     options['initialdir'] = 'C:\\Users\\kom01\\Documents\\Python Scripts' 


    def askopenfilename(self): 
     filename = filedialog.askopenfilename(**self.dir_opt) 
     if filename: 
      return open(filename, 'r') 

    def askdirectory(self, root): 
     return filedialog.askdirectory(**self.dir_opt) 

if __name__=='__main__': 
    root = Tk() 
    filedialogexample(root).grid() 
    root.mainloop() 

ありがとうございました!

+0

'filedialog.askopenfilename'に渡される' initialdir'をラジオボタンごとに異なるようにしますか?とにかく、変数 'self.favorite'が選択されたラジオボタンに対応する値を含むように、各ラジオボタンに値を与えるべきです。さらに、 'askopenfilename'関数によって返されたファイルは、ボタンコマンドからは使用できません。 –

+0

迅速な対応に感謝します。はい、すべてのラジオボタンには独自の 'initialdir'があります。価値のあるチップをありがとう、それを忘れてしまった。最後に、私は 'askopenfilename'でファイルを返すコードを見つけましたが、うまくいきません。代わりに私は何を使うべきですか? – Cucumber12

+0

それはあなたがファイルで何をしたいかによって決まります。関数内で行うこともできますし、ファイル名を格納する属性、 'self.myfile = filename'を作成して他の関数で使用することもできます。 –

答えて

1

initialdirfiledailog.askopenfilenameに選択するには、ラジオボタンの値オプションを使用します。すべてのラジオボタンがself.favorite変数に接続されているため、self.favoriteには選択したラジオボタンの値が含まれます。

まず、各ラジオボタンにフォルダへのパスを割り当てる必要があります(ラジオボタン作成時にvalue='path\\to\\folder')。次に、askopenfilenameself.favorite.get()initialdirとして渡します。最後に、開いたファイルを返すのは無駄です。なぜなら、ボタンコマンドから取得できないからです。したがって、askopenfilename関数内のファイルに対して操作を直接実行する必要があります。下の例では、ファイルの内容を表示しています。

import tkinter 
from tkinter import filedialog 

class filedialogexample(tkinter.Frame): 
    def __init__(self, root): 
     tkinter.Frame.__init__(self, root) 
     self.favorite = tkinter.StringVar() 

     tkinter.Radiobutton(self, text = "Browse 1", variable = self.favorite, 
       command=self.askopenfilename, value="folder1" 
       ).grid(row=2, column=0, columnspan=2, sticky='w') 
     tkinter.Radiobutton(self, text = "Browse 2", variable = self.favorite, 
       command=self.askopenfilename, value="folder2" 
       ).grid(row=3, column=0, columnspan=2, sticky='w') 
     tkinter.Radiobutton(self, text = "Browse 3", variable = self.favorite, 
       command=self.askopenfilename, value="folder3" 
       ).grid(row=4, column=0, columnspan=2, sticky='w') 
     tkinter.Radiobutton(self, text = "Browse 4", variable = self.favorite, 
       command=self.askopenfilename, value="folder4" 
       ).grid(row=5, column=0, columnspan=2, sticky='w') 
     # replace folder1,..,folder4 by actual paths to folders 


    def askopenfilename(self): 
     # initialdir is given by the selected radiobutton 
     filename = filedialog.askopenfilename(initialdir=self.favorite.get()) 
     if filename: 
      self.do_something_on_selected_file(filename) 

    def do_something_on_selected_file(self, filename): 
     with open(filename, 'r') as myfile: 
      print(myfile.read()) 

if __name__=='__main__': 
    root = tkinter.Tk() 
    filedialogexample(root).grid() 
    root.mainloop() 
関連する問題